这很技术丨3分钟了解Web架构小知识

24 评论 64770 浏览 416 收藏 9 分钟

很多初创的小团队并没有架构师,而且就算有,人家讲话的时候你一脸懵逼也不合适啊。

一开始你只是参与一个小项目,架构好像对你来说并不是什么重要的事,大家讨论下就马上开发,一台服务器轻松搞定操作系统+开发语言+应用程序+数据库。可是,突然有一天你的项目突然由于什么不可知的原因你的项目收到广泛专注!!!使用人数激增!!!

于是就很容易涌现各种性能问题、负载问题,如果处理不当也许就错失风投良机了。。。(就快要成为下一个facebook了!)

所以,你说架构重不重要!

但是你也许会说,我只是一只产品狗子,做架构有架构师啊~~但是,我要说的是,很多初创的小团队并没有架构师,而且就算有,人家讲话的时候你一脸懵逼也不合适啊。。。

既然这样,快点来看看架构的小知识!!!

(这里讲的架构并非传统产品经理喜欢研究的那种信息架构或者业务架构)

web前端

运行环境:

其实就是提供程序运行环境的Web服务器,可以向浏览器等Web客户端提供文档文件让全世界浏览和下载。使用最多的 web服务器软件有两个:微软的信息服务器(iis),和Apache。

Facebook采用的技术架构LAMP(Linux、Apache、MySQL、PHP),其中就有Apache。Apache是目前世界使用排名第一的Web服务器软件,它可以运行在几乎所有广泛使用的计算机平台上。

1040370

编码开发:

这个很容易引起 “哪种编程语言是最好的?”世界之争。。。大家可以直接看2016编程语言排行榜,但并不代表本主编立场。

QQ截图20160721195745

值得一提的是,Facebook作为开源第一大厂,自家开发并且开源了HipHop for PHP,(yoyoyo很嘻哈么)这是一个PHP到C++的转换程序,目的是旨在加速和优化PHP,HipHop for PHP 比纯PHP有高一倍的效能,从而大大减少了服务器的需求,流弊啊。。。

类库框架:

类库解决代码或者是模块级别的复用或者对复杂度的封装问题。框架则是对模式级别的复用和对程序组织的规范。常用的框架有,Spring Framework (Java开源 J2EE框架)Struts (Java开源 Web框架)Hibernate (Java开源 持久层框架)。

QQ截图20160722112747

而facebook使用的是Thrift框架,对了,也是他们自己开发的。。。thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。如 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 可以在这些编程语言间无缝结合、高效的服务。

负载均衡

硬件负载均衡:

是一种把网络请求分散到一个服务器集群中的可用服务器上去,通过管理进入的Web数据流量和增加有效的网络带宽的硬件设备。能够直接通过智能交换机实现,处理能力更强,但问题就是:贵!如图传说中的f5

QQ截图20160714200901

软件负载均衡:

价格低,甚至有免费开源的负载均衡策略,但效果肯定不如硬件,但一般中型网站够用。目前使用最为广泛的负载均衡软件是Nginx、LVS、HAProxy。

数据库和缓存

数据库方案:

选择数据库需要考虑数据的量级、计算场景和处理数据的频次来选择。

facebook使用MySQL、Memcached、Hadoop’s HBase实现持久化。memcached是一套分布式的快取系统通过缓存数据库查询结果,减少数据库访问次数,以提高动态Web应用的速度、提高可扩展性。

分布式存储服务器

分布式存储系统,是将数据分散存储在多台独立的设备上。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提高了系统的可靠性、可用性和存取效率,还易于扩展。

Facebook用户所发布的照片数以亿计,其存储由Haystack这个ad-hoc存储解决方案(由Facebook开发)来处理——包括对其进行低级别优化与只扩展写入方式。

QQ截图20160722113204

TAO是Facebook一种用来处理社交图形信息的分布式数据库。针对读取进行优化的数据存储机制,并以单一地理分布实例的方式部署在Facebook当中。 Tao系统的设计初衷在于为“数PB级别”的庞大数据集提供每秒超过十亿次读取操作。

Facebook拥有超过6万台服务器。最近发布的数据中心位于俄勒冈州普赖恩维尔市,硬件完全自行设计,并被归为Open Compute Project。

源代码管理和版本控制

源码管理工具是一种记录代码更改历史,可以无限回溯,用于代码管理,多个程序员开发协作的工具。几种常用的有:svn、cvs、hg、git、vss。

1454292321-0

作为工程师的天堂(产品经理的火葬场),facebook是这样做的

  • 有非常牢靠的安全体系,以免有人不小心/故意做了些不好的事。
  • 每个工程师可以修改facebook的任何代码,随时可以迁入。
  • 所有的代码修改都要进行审核(通过一个或多个工程师),但News Feed是个例外,因为太重要了,Zuckerberg会亲自review。
  • 所有的修改至少要被一个人审核,而且这个系统可以让任何人很方便地审核其他人的代码,即使你没有邀请他。
  • 工程师负责测试,代码修复,和维护自己的项目。
  • 运维组是受过严格训练,倍受尊敬,而且有商业意识的。他们的工作包括分析错误日志,负载和内存状态等等。还包括用户行为。

另外:

  • 产品经理与工程师的比例大约为1-7到1-10。
  • 浓厚的工程师驱动文化。”产品经理基本可以被忽略”,这是facebook一名员工的话。工程师可以修改流程的细节,重新安排工作任务,随时植入自己的想法。
  • 对于某个特性是否值得开发的争论,通常是这么解决的:花一个星期的时间完成他,并在小部分人群中(如1%)进行测试。

参考:http://www.yixieshi.com/21053.html

 

作者:lottelyn江琳。公众号:这个产品超难用(chaonanyong233),企业级软件产品经理

本文由 @lottelyn江琳 原创发布于人人都是产品经理。未经许可,禁止转载。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 服务器用什么软件,服务器硬件,这些都和软件架构没关系。
    架构师只关注软件的架构,顾名思义。PM也一样。
    运维有运维的活儿,专业的事交给专业的人员。后端一般不会去涉及运维的。
    此外,版本控制是项目经理的事情……
    有一些确实是架构的活儿,但有一些没关系。
    分得清楚一点的目的,是至少出了问题,知道去找谁。

    来自浙江 回复
  2. 你说的这些,说实话没多大用啊。
    知识倒是知识,但感觉不成体系。光是列举名词,连我都不知道有什么用处。
    而且facebook等等自己研发的框架,没必要说出来。用户量少,没有意义。
    说白了,重要的是思想,体系。
    MVC框架的内涵是什么?彼此怎么通信,交流?
    前后端的连接和通信是怎么通信的,哪些属于前端,哪些属于后端,数据库要怎么设计?
    这些才是架构师工作中比较重要的一部分。
    而且架构师说白了,也不会负责运营维护这一块啊。。。。。服务器选择什么软件。。这个无所谓啊。架构师不会关注。一般有专业的运维人员。这里真心写得比较蒙。。。
    单独列举N多的名词没有意义。

    来自浙江 回复
  3. 产品的火葬场 ➡

    来自北京 回复
  4. 是不是应该换个题目叫Facebook的XXXX,感觉会误导人

    来自北京 回复
  5. 一脸懵逼啊亲

    来自上海 回复
  6. 看完真的是一脸懵逼,没有get到点

    来自吉林 回复
  7. 什么鬼

    来自北京 回复
  8. EXM??

    来自广东 回复
  9. 以为只有我一脸懵逼。

    来自重庆 回复
  10. 关注了你的公众号,为什么会讲星座学啊。。。。这样很不专业啊。跟产品有什么关系。。。

    来自日本 回复
  11. 一脸懵逼的我。要加油充电了。

    来自日本 回复
  12. 只有我是程序转的产品吗 🙂

    来自上海 回复
    1. 产品自学技术+1

      来自河南 回复
    2. 求推荐自学材料 😥

      来自浙江 回复
    3. 产品自学技术+2

      来自北京 回复
    4. 求推荐自学材料 😥

      来自浙江 回复
    5. 网上好多免费视频,像慕课网,还有实战训练的。找正规系统的,从头看起,跟着装软件配环境。先从最简单的前端看起吧

      来自北京 回复
  13. 一脸懵逼的看完了

    来自浙江 回复
  14. 看不懂

    回复
  15. 就这也叫web架构?作者你在逗我?

    来自上海 回复
    1. 作者只是简单描述一下 facebook的 基础架构

      来自河南 回复
  16. 咱俩同感,我也是不想一脸懵比,所以买了一本架构的书······于是更是一脸懵比 😕

    来自北京 回复
  17. 来点APP的

    来自四川 回复
  18. 不是很能看懂………

    回复