- 1. 互联网系统架构陈利人
微信:diggerchen
微博:lirenchen
- 2. 提纲指导思想
实例
架构进化
实现框架
常用技术
- 3. 指导思想分而治之(divide and conquer)
集中调度(centralized schedule)
缓存(cache)
复制(replication)
数据采集(sample)
- 4. 实例1:Google早期系统架构Replica 1Replica 0GTCNetscalerGFEGSLBGFEGFEBackend0Backend0Backend0Backend0LBBackend1Backend1UserBorgBorgMonAlertManager
- 5. 实例2:分层分模块架构
- 6. 架构进化运用指导思想,一步一步进化成一个大规模的服务架构
- 7. 分离webserver和数据库http://www.blogjava.net/BlueDavy/archive/2008/09/03/226749.html状态收集
- 8. 增加页面缓存状态收集
- 9. 增加页面片段缓存状态收集
- 10. 数据缓存状态收集
- 11. 增加webserver状态收集服务调度
- 12. 分库状态收集服务调度
- 13. 分表、DAL和分布式缓存状态收集服务调度
- 14. 增加更多的webserver状态收集
- 15. 数据读写分离和廉价存储方案状态收集
- 16. 大型分布式应用和廉价服务器群状态收集服务调度
- 17. 实现框架Zookeeper服务集群管理Thrift RPC 实现服务模块Nagios数据采集监控
- 18. ZooKeeperZookeeper 从设计模式角度来看,是一个基于观察者模式设计的分布式服务管理框架,负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper 就将负责通知已经在 Zookeeper 上注册的那些观察者做出相应的反应,从而实现集群管理。
- 19. 统一命名服务(Name Service)分布式应用中,通常需要有一套完整的命名规则,既能够产生唯一的名称又便于人识别和记住,通常情况下用树形的名称结构是一个理想的选择,树形的名称结构是一个有层次的目录结构,既对人友好又不会重复。
Name Service 已经是 Zookeeper 内置的功能,只要调用 Zookeeper 的 API 就能实现。如调用 create 接口就可以很容易创建一个目录节点。
- 20. 配置管理(Config Management)配置的管理在分布式应用环境中很常见,例如同一个应用系统需要多台 Server 运行,但是它们运行的应用系统的某些配置项是相同的,如果要修改这些相同的配置项,那么就必须同时修改每台运行这个应用系统的 Server,这样非常麻烦而且容易出错。像这样的配置信息完全可以交给 Zookeeper 来管理,将配置信息保存在 Zookeeper 的某个目录节点中,然后将所有需要修改的应用机器监控配置信息的状态,一旦配置信息发生变化,每台应用机器就会收到 Zookeeper 的通知,然后从 Zookeeper 获取新的配置信息应用到系统中。
- 21. 配置管理(Config Management)
- 22. 集群管理(Group Membership)Zookeeper 能够很容易的实现集群管理的功能,如有多台 Server 组成一个服务集群,那么必须要一个“总管”知道当前集群中每台机器的服务状态,一旦有机器不能提供服务,集群中其它集群必须知道,从而做出调整重新分配服务策略。同样当增加集群的服务能力时,就会增加一台或多台 Server,同样也必须让“总管”知道。实现方式都是在 Zookeeper 上创建一个 EPHEMERAL 类型的目录节点,然后每个 Server 在它们创建目录节点的父目录节点上调用 getChildren(String path, boolean watch) 方法并设置 watch 为 true,由于是 EPHEMERAL 目录节点,当创建它的 Server 死去,这个目录节点也随之被删除,所以 Children 将会变化,这时 getChildren上的 Watch 将会被调用,所以其它 Server 就知道已经有某台 Server 死去了。新增 Server 也是同样的原理。
- 23. 集群管理(Group Membership)
- 24. ThriftThrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。结合了功能强大的软件堆栈的代码生成引擎,无缝地与C++,C#,Java,Python和PHP和Ruby,Javascript等多种语言结合。Thrift允许你定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。竞品有ProtoBuf等。
- 25. Thrift 文件样例Hello.thrift
namespace java service.demo
service Hello{
string helloString(1:string para)
i32 helloInt(1:i32 para)
bool helloBoolean(1:bool para)
void helloVoid()
string helloNull()
}
定义了服务 Hello 的五个方法,每个方法包含一个方法名,参数列表和返回类型。每个参数包括参数序号,参数类型以及参数名。使用 Thrift 工具编译 Hello.thrift,就会生成相应的 Hello.java 文件。该文件包含了在 Hello.thrift 文件中描述的服务 Hello 的接口定义,即 Hello.Iface 接口,以及服务调用的底层通信细节。
- 26. Thrift 文件样例struct Report {
1: required string msg ; //该字段必须填写
2: optional i32 type = 0; //默认值
3: i32 time //默认字段类型为optional
}
- 27. Thrift 架构
- 28. Nagios一款免费的开源 IT 基础设施监控系统,其功能强大,灵活性强,能有效监控 Windows 、Linux、VMware 和 Unix 主机状态,交换机、路由器等网络设置等。一旦主机或服务状态出现异常时,会发出邮件或短信报警第一时间通知 IT 运营人员,在状态恢复后发出正常的邮件或短信通知。Nagios 结构简单,可维护性强,同时提供一个可选的基于浏览器的 Web 界面,方便管理人员查看系统的运行状态,网络状态、服务状态、日志信息,以及其他异常现象。简单地插件设计使得用户可以方便地扩展自己服务的检测方法。竞品有Zabbix等。
- 29. Nagios工作原理
- 30. Nagios架构
- 31. 插件样例插件:
#!/usr/bin/env python
import os,sys
(d1, d2, d3) = os.getloadavg()
if d1 >= 5.0:
print "GETLOADAVG CRITICAL: Load average is %.2f" % (d1)
sys.exit(2)
else:
print "GETLOADAVG OK: Load average is %.2f" % (d1)
sys.exit(0)
注册:
define command {
command_name check_mygetloadavg
command_line /path/to/check_getloadavg }
使用:
define service{
use service-template
host_name localhost
service_description LoadAverage
check_period 24x7
contact_groups server-admins
notification_options c,r
check_command check_mygetloadavg}
- 32. Put them togetherZooKeeper数据服务1数据服务2数据服务n业务服务1业务服务2业务服务m展示服务1展示服务2展示服务k注册监听ThriftThriftThriftThriftThrift反向代理1反向代理2反向代理l负载均衡Nagios
- 33. Q/A or Continue?
- 34. 常用技术前端
应用逻辑
后端
数据库
搜索
推荐
移动
- 35. 前端防火墙,DDos
负载均衡:F5,Netscaler,LVS,DNS
HTML,HTML5,Flash,Javascript
PHP,Java,Ruby,.Net,Python,Node.js
Apache,Nginx,customized http server
- 36. 负载均衡数据中心间均衡:DNS
数据中心内均衡:F5,LVS,反向代理
后端服务均衡
- 37. 应用逻辑PHP,Ruby,Python,Java,.Net等
框架
组件
- 38. 数据库Database:MySQL,Postgres,Oracle
NoSQL:MongoDB,Cassandra
- 39. 数据库/存储结构
- 40. 数据库/分表
- 41. 数据库/分表http://blog.csdn.net/bluishglc/article/details/6161475
- 42. 数据库/高可靠性http://isky000.com/database/ha-scale-out-architecture-based-mysql
- 43. 数据库/Cache & Search
- 44. NoSQLhttp://sebug.net/paper/databases/nosql/Nosql.html
http://tech.it168.com/a2011/0920/1248/000001248963_all.shtml
- 45. 搜索引擎
- 46. 推荐引擎http://www.ibm.com/developerworks/cn/web/1103_zhaoct_recommstudy1/index.html
- 47. 推荐引擎基于人口统计学的推荐机制的工作原理
- 48. 推荐引擎基于内容推荐机制的基本原理
- 49. 推荐引擎基于用户的协同过滤推荐机制的基本原理
- 50. 推荐引擎基于项目的协同过滤推荐机制的基本原理
- 51. CDN
- 52. 移动互联网
- 53. 技术/移动互联网
- 54. 技术/移动互联网
- 55. 淘宝http://kb.cnblogs.com/page/132724/
- 56. Flickrhttp://www.itivy.com/ivy/archive/2011/3/7/634351294385186067.html
- 57. Google 搜索早期
- 58. Google 搜索http://photo.weibo.com/1915548291/wbphotos/large/photo_id/3513857299752733?refer=weibofeedv5