互联网系统架构 PPT
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
统一命名服务(Name Service)
配置管理(Config Management)
配置管理(Config Management)
集群管理(Group Membership)
集群管理(Group Membership)
Thrift
• Thrift 是 Facebook 实现的一种高效的、 支持多种编程语言的远程服务调用的框架。 结合了功能强大的软件堆栈的代码生成引 擎,无缝地与C++,C#,Java,Python和 PHP和Ruby,Javascript等多种语言结合。 Thrift允许你定义一个简单的定义文件中 的数据类型和服务接口,以作为输入文件, 编译器生成代码用来方便地生成RPC客户端 和服务器通信的无缝跨编程语言。竞品有 ProtoBuf等。
• 数据中心间均衡:DNS • 数据中心内均衡:F5,LVS,反向代理 • 后端服务均衡
LoadAverage
check_period
24x7
contact_groups
server-admins
notification_options
c,r
check_command
check_mygetloadavg}
Put them together
ZooKeeper
注册 监听
数据服务1
数据服务2
常用技术
前端
• 防火墙,DDos • 负载均衡:F5,Netscaler,LVS,DNS • HTML,HTML5,Flash,Javascript • PHP,Java,Ruby,.Net,Python,
Node.js • Apache,Nginx,customized http server
负载均衡
Nagios架构
插件样例
插件:
#!/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)
Thrift 文件样例
struct Report { 1: required string msg ; //该字段必须填写 2: optional i32 type = 0; //默认值 3: i32 time //默认字段类型为optional }
Thrift 架构
Nagios
Nagios工作原理
Netscaler User
Borg GFE
Backend0 Replica 0 Backend0
AlertManager BorgMon
Backend0
GFE
Backend1
GFE Replica 1
Backend1
Backend0
GTC
GSLB
LB
实例2:分层分模块架构
架构进化
• 运用指导思想,一步一步进化成一个大规 模的服务架构
状态收集
数据读写分离和廉价存储方案
状态收集
大型分布式应用和廉价服务器群
服务调度
状态收集
实现框架
Zookeeper服务集群管理 Thrift RPC 实现服务模块
Nagios数据采集监控
ZooKeeper
• Zookeeper 从设计模式角度来看,是一个 基于观察者模式设计的分布式服务管理框 架,负责存储和管理大家都关心的数据, 然后接受观察者的注册,一旦这些数据的 状态发生变化,Zookeeper 就将负责通知 已经在 Zookeeper 上注册的那些观察者做 出相应的反应,从而实现集群管理。
互联网系统架构
• 指导思想 • 实例 • 架构进化 • 实现框架 • 常用技术
提纲
指导思想
• 分而治之(divide and conquer) • 集中调度(centralized schedule) • 缓存(cache) • 复制(replication) • 数据采集(sample)
实例1:Google早期系统架构
分离webserver和数据库
状态收集
大家应该也有点累了,稍作休息
大家有疑问的,可以询问和交流
增加页面缓存
状态收集
增加页面片段缓存
状态收集
数据缓存
状态收集
服务调度
增加webserver
状态收集
服务调度
分库
状态收集
分表、DAL和分布式缓存 状态收集
服务调度
增加更多的webserver
注册:
define command { command_name check_mygetloadavg command_line /path/to/check_getloadavg }
使用:
define service{
use
service-template
host_name
localhost
service_description
Baidu Nhomakorabea
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() }
Thrift 业务服务1
Thrift 业务服务2
Thrift
Thrift Thrift
展示服务1
展示服务2
数据服务n 业务服务m 展示服务k
Nagios
反向代理1
反向代理2 负载均衡
反向代理l
Q/A or Continue?
• 前端 • 应用逻辑 • 后端 • 数据库 • 搜索 • 推荐 • 移动
定义了服务 Hello 的五个方法,每个方法包含一个方法名,参数 列表和返回类型。每个参数包括参数序号,参数类型以及参数名。 使用 Thrift 工具编译 Hello.thrift,就会生成相应的 Hello.java 文件。 该文件包含了在 Hello.thrift 文件中描述的服务 Hello 的接口定义, 即 Hello.Iface 接口,以及服务调用的底层通信细节。