中大型移动互联网公司技术架构选择

标签: 中大 移动 互联网 | 发表时间:2014-03-05 08:09 | 作者:
出处:http://2014.54chen.com/

以下内容由 [五四陈科学院]提供

总体思考

总结这些年经验,进行构架演进的方向选择时,大致要做到下面的目标:

  • 可快速开发部署 (五分钟写出来一个经过测试的hello world并可访问/调用,并可在公网访问)
  • 天然可扩展(业务层无状态,尽可能全部放到最后)
  • 自动化(内存不足了,除了报警,应该自动加点机器进去; 新的项目,基础代码应该都不用写,自动生成即可)
  • 框架化(公共层面的东西尽可能框架化,一层类似日志、counter、trace,应该不需要开发再写一行代码即默认打开)
  • 量化(所有的调用都应该有percentile与rps,透明反馈服务质量,跟踪系统更是可以模拟用户进行系统内部)
  • 同构化(因为搞两套的成本巨大,整体应该越来越趋同于同一种语言)
  • 硬件虚拟化(整个平台应该对进程透明下面的硬件情况)
  • 版本化、灰度化(所有的软件都应该在线上有明确的版本,且上线过程是一点点灰度上)

中大型移动互联网公司技术架构选择

上图纯手绘花了些时间,本文以此图从上到下的顺序进行描述。

用户

在移动互联网环境下,用户会被分为好网络的用户和坏网络的用户,我们要为坏网络的用户尽一切可能提供合适的链路和可靠的DNS。

接入层

在接入层的代码层面,需要准备client-server套件,这意味着,需要一个同时了解android\ios..等客户端和服务器端开发的团队,专门打造网络套件。

  • 这一层的目标是,让客户端开发人员不再关心网络协议的问题。

业务接入层

这一层的目标是灵通机动调配流量,往往大家的方案都是LVS,或者是F5等。更高大上一点,再上一些流量分析设备,在有突增的时候好用来找问题。

业务层

在统一的业务框架下,去完成各个灵活组织的BIZ逻辑,这里就涉及到异构系统对一个大型公司的影响。

  • 如果80%的人都在使用java的活,还是趁早全用java,因为意味着剩下20%用其他语言的同学,有可能要把这80%的同学做的基础全部实现一遍。
  • 异构必然会导致某些模块不能完美工作,比如后续的RPC、配置管理、监控报警、跟踪系统等等。

RPC框架与队列

二者一起完成数据在IDC的传递,不同在于,一个是同步,一个是异步。

  • 统一的RPC框架好处不必言说。

配置管理

zookeeper当选最佳角色,上点规模的服务里基本都会有zk的身影。

日志系统

统一的日志系统,对未来发展中所需要的各种数据更加容易得到。日志系统的特点要求:快,容网络错误,部署简单,进程稳定,可水平扩展。

  • scribe与kafka都是不错的选择。
  • 这里最终的日志,可能会需要放到hdfs或者是hbase里进行hive查询,否则数据量大了之后要想把日志用起来很不容易。

监控报警系统

ganglia与nagios仍旧是最好用的开源管理软件。

  • 需要考虑的是,要将在业务框架里默认记录的公共的perfcounter进行监控与报警。

跟踪系统

当系统出现bug的时候,用来快速debug,当服务越来越多的时候,跟踪系统是个必不可少的工具。

  • twitter的zipkin是个不错的开源的实现,不过要使用到自家的代码里来,可能要加工一下。

PAAS Agent Daemon

整体统一的运维平台的客户端程序,此程序负责:向监控系统汇报硬件及网络数据,启动和停止应用程序,向监控系统和PAAS平台传递应用程序的运行状态。

存储平台

此层包括所有重状态的hosting service。

  • memcached cluster,使用统一的一致性hash客户端,所有的缓存服务器进行统一管理,计算命中率、使用率,实时添加内存。
  • DBMS cluster,使用统一的数据库分库分表层,动态地感知和切换故障。常见的项目如mysqlproxy,变形虫。
  • HBase cluster,独立的存储可用性保障,本身也是设计为高可用性的集群。

PAAS 资源控制层

目标是实时反馈整个或多个IDC内部的内存还有多少、CPU是否够用、下次采购还需要多少机器。

  • 虚拟化是个重点难题。常见开源软件:docker、warden、LXC。
  • 资源控制CPU可用cgroups,磁盘可用aufs等,一般的虚拟化方案中都已经包括这几项解决办法。

PAAS用户界面层

这一层主要面向运维和开发人员,比如用来上线服务、添加删除机器。

  • 除了web界面,还应该有cli模式的支持。

自动部署层

一般都以hudson的CI(持续构建)完成之后进行,但可自动化的部署一定需要测试框架非常靠谱,以及测试代码靠谱,否则就是个悲剧。

测试框架

借用一些高级框架,让代码写少一点,比如jmockit、spring-test等等。

编译工具

java的maven为不二选择。编译好的包仓库,推荐nexus。

代码生成

开发人员不需要重复进行操作,只要框架是固定的,所有的代码应该都是可以生成的。只需要花精力去修改核心逻辑。

  • 这里比较抽象,可以用的办法比如做一个maven-plugin,让全部工程师都会用。
  • 不断地去升级这个工具,使其包括更多的可能的代码方式。

代码质量

在工程师的代码完成之后,跑一遍静态分析,可以提前发现一些问题,可以做成定期的模式,与持续集成放在一起。

  • 推荐hudson + maven + sonar三剑合一。

代码及常规系统

  • 代码托管:gitlab是一个不错的类似github(越来越像了)的工具。
  • codereview:可直接使用gitlab的merge request,也可以使用开源的reviewboard。
  • 知识管理:没什么好说的,mediawiki。
  • 需求与bug:jira。
  • 故障管理:这个没有开源项目,post-mortem system,是一种记录故障原因的系统,下一次故障来临的时候,来这个系统里进行问卷式的调查和反思。

PAAS for DEV & TEST

  • 开发阶段需要之前提到的cli可发布到自己的开发机(这里还需要PAAS可很容易地开一个新的开发机)的工具。
  • 测试阶段需要比开发阶段更加高可用性的环境,而且要时刻提升基础工具的可靠性,不应该让开发环境在发展中消失,反而用测试环境来当作开发环境,现实中发生此类事件的原因,都是部署没有做到完美。

想快点找到作者也可以到Twitter上留言: @54chen
或者你懒得带梯子上墙,请到新浪微博: @54chen

相关 [中大 移动 互联网] 推荐:

中大型移动互联网公司技术架构选择

- - 五四陈科学院
以下内容由 [五四陈科学院]提供. 总结这些年经验,进行构架演进的方向选择时,大致要做到下面的目标:. 可快速开发部署 (五分钟写出来一个经过测试的hello world并可访问/调用,并可在公网访问). 天然可扩展(业务层无状态,尽可能全部放到最后). 自动化(内存不足了,除了报警,应该自动加点机器进去; 新的项目,基础代码应该都不用写,自动生成即可).

移动互联网=移动+互联网?

- 可可 - It Talks-魏武挥的blog
从名词上看,移动互联网似乎就是互联网加上一个移动. 但移动互联网远不是“移动的互联网”那么简单. 它的本质——网络部分,就和互联网大不相同;而它的表现——移动部分,也正因为移动,造就了很多和互联网相当不一样的商业机会. 而更重要也是很多人并没有注意到的是,它可能会改变整整一代人的信息处理习惯. 从网络部分而言,我们都知道,理论上互联网是没有拥有者的.

Google在移动互联网

- alex zhao - 白鸦,以用户为中心的设计
知乎上有个问题:在移动互联网竞争中,Google 最有利且可实现的位置在哪里. Google手里其实有三柄利剑:. Android,这个是后面两点的基础,不是说没有OS后面两个就跑不起来,而是说了这个后面两个以及更多的Google应用才有更舒适的土壤. Android,已经很像PC时代的windows了.

初识移动互联网

- 丁丁 - 月光博客
  正如个人电脑PC机在90年代初给市场和用户带来巨变一样,以几何级速度增长的移动互联网市场也正上演着巨头之争. 吴军在《浪潮之巅》里面对pc互联网的几大之争大概描述如下:. 操作系统:微软的windows和苹果的麦金托什(Macintosh),微软胜出,个人电脑的操作系统从此以windows为主流.

移动互联网的入口之争

- pikka - 月光博客
  入口是指你最常寻找信息、解决问题的方式,搜索引擎是互联网最大的入口,网址导航提供与搜索引擎不同价值的入口. QQ是一个中国互联网的怪胎巨鳄,拥有最完整、最真实的社交网络,但是因为它没有广泛输出价值所以现在还不算入口,浏览器作为用户访问互联网的重要工具也成为入口,而操作系统则是整个链条中最大的入口.

谈移动互联网应用

- - 人月神话的BLOG
周末参加了pmcaff组织的产品经理峰会,里面有个主题是谈移动互联网应用相关的,对这块个人没有做过,只能简单谈下个人的一些想法. 讨论中提到的一点,移动互联网应用和市场增速会很快,是传统互联网的多少倍不好说,但是简单以现有移动互联网的规模来讲,2-3年时间5-10倍的增速是完全可能的,毕竟当前的移动互联网的规模毕竟小.

移动互联网数据收集(1)

- - 曉生語錄
UC《2012年移动互联网趋势报告》. 1.UC用户量3亿,月活跃用户突破2亿,海外用户超过4000万. 2.Android月活跃用户超过4000万,年增长超过10倍,2012年Andorid智能终端有望达到1.8亿. 3.Android3.1-4寸大屏幕占79.7%,2.3固件占56.9%. 4.Android用户中,3G接入占11.4%,WIFI接入占25.4%.

移动互联网发展再加速

- - 《商业价值》杂志
伴随3G技术的广泛应用、智能终端的普及和网民使用习惯的改变,移动互联网行业正迎来一个全新时代. 它的发展规模和发展速度,超乎大多数人的想象. StatCounter在最新报告中称:全球移动互联网使用率上升到了8.5%,几乎是2011年的两倍. 在报告中提及的移动设备未包含iPad等平板电脑,仅仅指手机,报告显示,全球移动Web使用率的老大哥仍旧是诺基亚,占40%,可谓老而弥坚.

闲谈移动互联网广告

- - 新媒体营销观察站
庆祝本博重新开张,顺便整理总结下近期的各类想法心得,加速神功大成,特写此文. 以下言论仅适用于android平台,纯粹瞎扯;同时目前对ios涉及较少,没有太多发言权,就不扯淡了. 积分墙广告会影响用户体验,对用户造成困扰. 积分墙广告和市场内广告重叠度太高,会影响市场自身的收入. 积分墙模式虽然屡遭市场风沙,但是却依然是众多广告平台首选的方向,为什么呢.

移动互联网三年而立

- - 《商业价值》杂志
如果用“三十而立”形容一个人的成熟期到来,那么用“三年而立”来形容移动互联网自2009年以来的发轫、爆发与成熟过程则十分贴切. 移动互联网的概念自运营商管控一切的时代即已有之,但它从小众的窠臼中脱胎重生,还是得益于iOS 和Android平台的诞生. 让我们用一组数据回顾移动互联网的三年之路. 2009年第三季度,iPhone的利润首超诺基亚.