一张图概括互联网公司的标准技术架构

大部分人对于BAT的技术有一种莫名的崇拜感,觉得只有非常牛逼和天才才能做出现在的这些系统,但经过前面两篇博文的分析,我们可以看到其实并没有什么神秘的力量和魔力融合在技术里面,而是业务的不断发展推动技术的不断发展,一步一个脚印,持续几年甚至十几年的发展,才能达到当前技术复杂度、先进性、牛逼度。

BAT解密(一):聊聊技术发展的驱动力

BAT解密(二):聊聊业务如何驱动技术发展

抛开BAT各自差异很大的业务,站在技术的角度来看,其实BAT的技术架构基本是一样的,再将视角放大,你会发现整个互联网行业的技术发展,最后都是殊途同归。

如果你正处于一个创业公司,或者正在成为另一个BAT的路上而拼搏,那么深入理解这种技术模式(或者叫技术结构、技术架构),对于自己的发展、公司的发展都大有裨益,你将不会再迷茫,你也不再会心里打鼓,CTO将对你刮目相看,CEO将奉你为神明 :)

闲话不多说,有图有真相,看看互联网的标准技术架构是什么样子:

上面这张图基本上一网打尽了互联网技术公司的技术点,不同的公司只是在具体的技术实现上稍有差异,但不会跳出这个框架的范畴。

接下来我将逐一介绍每个技术点,包括为什么会有这些技术点,这些技术点的主要场景是什么,这些技术点将如何发展。

存储层技术剖析

1. SQL

即关系数据。前几年NoSQL火了一阵子,很多人都理解为NoSQL是完全抛弃关系数据,全部采用非关系型数据,但事实经过几年的试验后,大家发现关系数据不可能完全抛弃,NoSQL不是No SQL,而是Not Only SQL,即NoSQL是SQL的补充。

所以互联网行业也必须依赖关系数据,考虑到Oracle太贵,还需要专人维护,一般情况下互联网行业都是用MySQL、PostgreSQL这类开源数据库。这类数据库的特点是开源免费,拿来就用;但缺点是性能相比商业数据库要差较多。随着互联网业务的发展,性能要求越来越高,必然要面对一个问题:将数据拆分到多个数据库实例才能满足业务的性能需求(其实Oracle也一样,只是时间早晚的问题)。

数据库拆分满足了性能的要求,但带来了复杂度的问题:数据如何拆分、数据如何组合。这个复杂度的问题解决起来并不是那么容易,如果每个业务都去实现一遍,重复造轮子将导致投入浪费、效率降低,业务开发想快都快不起来。

所以互联网公司流行的做法是发展到一定阶段后,就会将这部分功能独立成中间件,例如百度的DBProxy、淘宝的TDDL。不过这部分的要求很高,将分库分表做到自动化和平台化,不是一件容易的事情,所以一般是很牛逼的公司才会做。典型的有:百度的DBProxy、淘宝TDDL。

如下是淘宝TDDL的结构图(来自果壳网):

2. NoSQL

NoSQL首先体现在数据结构上与传统的SQL的不同,例如典型的Memcached的Key-value结构、Redis的复杂数据结构、MongoDB的文档数据结构;其次NoSQL无一例外的都会将性能作为自己的一大买点。

NoSQL的这两个特点很好的弥补了关系数据库的不足,因此在互联网行业NoSQL的应用基本上是基础要求,要是你听到一个号称自己是互联网公司却连NoSQL都没用,那基本上可以判断是挂羊头卖狗肉类型的。

由于NoSQL方案一般都会自己本身就提供集群的功能,例如Memcached的一致性hash集群、Redis 3.0的集群,因此NoSQL在刚开始应用的时候很方便,不像SQL分库分表那么复杂。一般公司也不会在开始的时候就考虑将NoSQL包装成存储平台,但如果公司发展很大,例如Memcached的节点有上千甚至几千的时候,NoSQL集群就很有意义了:首先是集中管理能够大大提升运维效率;其次是集中管理可以大大提升资源利用效率,2000台机器,如果利用率能提升10%,就是减少200台机器,一年几十万就节省出来了。

所以,NoSQL发展到一定规模后,一般都是走集群路线,当然要发展到这个阶段,一般也是很牛逼的公司才会这么做。

典型的有:Twitter的Twemproxy,豆瓣的BeansDB、腾讯TTC。

如下是Twemproxy的结构图:

3. 小文件存储

除了关系型的业务数据外,互联网行业还有很多用于展示的数据,例如淘宝的商品图片、商品描述;Facebook的用户图片,新浪微博的一条微博内容等等。这些数据具有3个典型特征:一是数据小,一般在1M一下;二是数量巨大,Facebook 2013年就达到了每天上传3.5亿张的照片;三是访问量巨大,Facebook每天的访问量超过10亿。

由于互联网行业基本上每个业务都会有大量的小数据,如果每个业务都自己去考虑如何设计海量存储和海量访问,效率自然会低,重复造轮子,投入浪费,自然而然的想法就是将小文件存储做成统一的和业务无关的平台。

和SQL和NoSQL不同的是,小文件存储不一定需要公司或者业务规模很大,基本上可以认为业务在起步阶段就可以考虑做小文件统一存储。得益于开源运动的发展和最近几年大数据的火爆,在开源方案的基础上封装一个小文件存储平台并不是太难的事情。例如HBase、Hadoop、Hypertable、FastDFS等都可以作为小文件存储的底层平台,只需要在这些开源方案三再包装一下基本上就可以用了。

典型的有:淘宝的TFS、京东JFS、Facebook的Haystack。

如下是淘宝TFS的架构:

开发层技术剖析

1. 开发框架

在系列文章的第2篇《BAT解密:业务如何驱动技术发展》中我们深入分析了互联网业务发展的一个特点:复杂性越来越高。复杂性增加的典型现象就是系统越来越多,不同的系统由不同的小组开发。如果每个小组用不同的开发框架和技术,将会带来很多问题,典型的问题有:

  1. 技术人员之间没有共同的技术语言,交流合作少
  2. 每类技术都需要投入大量的人力和资源和熟练精通
  3. 不同团队之间人员无法快速流动,人力资源不能高效的利用

所以,互联网公司都会指定一个大的技术方向,然后使用统一的开发框架,例如Java相关的开发框架SSH、SpringMVC、Play、Ruby的Ruby on Rails、PHP的ThinkPHP、Python的Django等等。使用统一的开发框架能够解决上面提到的各种问题,大大提升组织和团队的开发效率。

对于框架的选择,有一个总的原则:优选成熟的框架,避免盲目追逐新技术!为什么呢?

首先,成熟的框架资料文档齐备,各种坑基本上都有人踩过了,遇到问题很容易通过搜索解决

其次,成熟的框架受众更广,招聘时更加容易招聘到合适的人才

第三,成熟的框架更加稳定,不会出现大的变动,适合长期发展

以我亲身经历的一个反例为例:我们使用了Play 1作为Java开发框架,因为它是轻量级的Java开发框架,但没想到Play 2直接改为Scala语言开发,Play 1的架构演进停滞,而我们又不能切换为Play 2,结果就导致只能一直用Play 1,有新的需求只能自己开发。

2. 服务器

开发框架只是负责完成业务功能的开发,真正能够运行起来,给用户提供服务,还需要服务器配合。

独立开发一个成熟的web服务器,成本非常高;且业界又有那么多成熟的开源web服务器,所以互联网行业基本上都是拿来主义,挑选一个流行的开源服务器即可。牛逼一点的公司,可能会在开源服务器的基础上,结合自己的业务特点做二次开发,例如淘宝的Tengine,但一般公司基本上只需要将开源服务器摸透,优化一下参数,调整一下配置就差不多了。

选择一个服务器主要和开发语言相关,例如:Java的有Tomcat、Jboss、Resin等,PHP/Python的用Nginx,当然最保险的就是用Apache了,什么语言都支持。

有的人可能担心Apache的性能之类的问题,其实不用过早担心这个,等到你的业务真的发展到Apache撑不住的时候再考虑切换也可以,那时候你有的是钱,有的是人,有的是时间。

3. 容器

容器是最近几年年才开始火起来的,其中以Docker为代表,在BAT级别的公司已经有较多的应用,例如腾讯:腾讯万台规模的Docker应用实践;新浪微博:微博红包:大规模Docker集群实践经验分享等等。

传统的虚拟化技术是虚拟机,解决了跨平台的问题,但由于虚拟机太庞大,启动慢,运行时太占资源,在互联网行业并没有大规模的应用;而Docker的容器技术,虽然没有跨平台,但启动快,几乎不占资源,推出后立刻就火起来了,预计Docker类的容器技术将是技术发展的主流方向。

千万不要以为Docker只是一个虚拟化或者容器技术,它将在很大程度上改变我们目前的技术形势:

  1. 运维方式会发生革命性的变化:Docker启动快,几乎不占资源,随时启动和停止,基于Docker打造自动化运维、智能化运维将成为主流方式
  2. 设计模式会发生本质化的变化:启动一个新的容器实例代价如此低,将鼓励设计思路朝“微服务”的方向发展。

例如一个传统的网站包括登录注册、页面访问、搜索等功能,没有用容器的情况下,除非有特别大的访问量,否则这些功能开始时都是集成在一个系统里面的;有了容器技术后,一开始设计就可以将这些功能按照服务的方式设计,避免后续访问量增大时又要重构系统。

时间: 2024-10-16 07:47:34

一张图概括互联网公司的标准技术架构的相关文章

几张图概括ERP系统的主要业务

ERP是将企业所有资源进行整合集成管理,简单的说是将企业的三大流:物流,资金流,信息流进行全面一体化管理的管理信息系统. 下边用几张图概括下主要业务: 三流一态 物流 资金流 未完待续...

某互联网公司广告平台技术架构

某互联网公司广告平台技术架构 演化 水平扩展一切 并行化,异步调用 演化 Randy的可扩展架构7原则 ? 按功能分区(Partition by Function) ? 水平切分 ? 避免事务 ? 异步解耦 ? 次序流改进为异步 ? 虚拟化所有层次 ? 适当使用缓存 原则 ? 先业务,后技术:先逻辑,后物理 ? 奥卡姆剃刀:如无必须,勿曾实体 ? 正交性:分解出模块无职责的重复 ? 稳定性原则:稳定和易变的分解   技术 -接口 -消息队列 -模块化,服务化 -异步化 -------------

一张图了解Spring Cloud微服务架构

Spring Cloud作为当下主流的微服务框架,可以让我们更简单快捷地实现微服务架构.Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟.经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂.易部署和易维护的分布式系统开发工具包.Spring Cloud中各个组件在微服务架构中扮演的角色如下图所示,黑线表示注释说明,蓝线由A指向B,表示B从A处获取服务. Spring Cloud组成的

从初入IT职场到技术总监,我用一张图告诉你什么是系统架构师!

这张图从架构师的综合能力.岗位认识.岗位职责等方面,清楚的画出了作为一个架构的基本准则.人人都想成为架构师,可作为架构你达到了图上面的要求了吗? 系统架构师是个神奇的岗位.为什么这么说,在一个人数不多的小公司,你可能什么都需要做,身体力行,做总监兼架构师或者是主管/高级开发兼架构师:在大公司,你可能只负责某个平台的架构,某些中间件的架构,你就是某一类的架构师. 无论怎么分,作为一个架构师,你必须具备以下几个特性. 技术能力 技术能力,不用置疑肯定是最重要的.技术能力弱的架构不是一个好架构.所以,

五张图概括 什么是 ASP 、 ASP.NET (Web Pages,Web Forms ,MVC )

当你看懂下面这五张图,我相信你对于学习.NET Web开发路线将不陌生!                                               来源: http://www.w3school.com.cn/ ASP   ASP.NET Web Pages Web Forms MVC 建议结合 : http://msdn.microsoft.com/  学习  !

4张图让你看懂分布式架构从硬件到软件

对于分布式的架构相对很多开发者都是个高大上的项目,其实只要看得懂图精通tcp通信.精通磁盘管理.精通内存管理.精通多线程与并行处理,精通事务(其实事务就是基于tcp通信层所扩展而来的MQ之类的一种IO消息模式而与),当然自己开发一套分布式架构上述的基本技术层面是必须比较精通的才能做到,涉及存储文件仓库或数据库仓库镜像技术其实也是基于tcp通信作为基础,没啥高大上的东西.

大型网站技术架构演化

一.大型网站软件系统的特点 1.高并发.大流量 a.什么是高并发? 高并发是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理多个请求. b.高并发的衡量指标有哪些? (1)响应时间:系统对请求做出响应.例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间. (2)吞吐量:单位时间内处理的请求数量. (3)QPS:每秒响应请求数.在互联网领域,这个指标和吞吐量区分的不那么明显. (4)并发用户数:同时承载正常使用系统功能的用户数量.

学习自然语言处理,一张图就够了

一张图看懂自然语言处理技术框架 一.前言 正在针对<人工智能产品经理最佳实践请添加链接描述>视频课程第三部分,关键技术篇,进行相关的内容重构,今天整理的部分是自然语言处理技术框架,特地绘制了一张自然语言处理的技术框架图,在此分享给大家. 二.正文 三.未完待续 个人梳理,未尽之处,欢迎指正.QQ技术交流群:149933712 原文地址:http://blog.51cto.com/hadoop2/2117652

BAT解密:互联网技术发展之路(3)- 牛逼公司的技术架构都是这个范

大部分人对于BAT的技术有一种莫名的崇拜感,觉得只有非常牛逼和天才才能做出现在的这些系统,但经过前面两篇博文的分析,我们可以看到其实并没有什么神秘的力量和魔力融合在技术里面,而是业务的不断发展推动技术的不断发展,一步一个脚印,持续几年甚至10几年的发展,才能达到当前技术复杂度.先进性.牛逼度. 抛开BAT各自差异很大的业务,站在技术的角度来看,其实BAT的技术架构基本是一样的,再将视角放大,你会发现整个互联网行业的技术发展,最后都是殊途同归. 如果你正处于一个创业公司,或者正在成为另一个BAT的