• 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