7.1 构建可扩展的网站架构
7.2 利用分布式消息队列降低系统耦合性
7.3 利用分布式服务打造可服用的业务平台
7.4 可扩展的数据结构
7.5 利用开发平台建设网站生态圈
7.6 小结
网站可扩展架构的核心:模块化(分层,分割)
模块分布式部署聚合的方式:1.分布式消息队列 2.分布式服务
分布式消息队列:基于事件架构(EDA),分布式消息队列(消息队列服务器:消息生产者应用服务器通过远程访问接口,
将消息推送给消息队列服务器,消息队列服务器根据订阅列表将消息推送给消息消费者应用程序)
消息队列服务器:伸缩性(数据是被即使处理掉的,类似于无状态服务器),可用性(如果内存不足,
会写入磁盘。为了避免消息队列宕机,会将成功发送到消息队列服务器的消息存储在消息生产者服务器,
等待消息被消息队列服务器处理后才删除)
分布式消息队列:ESB(企业服务总线),SOA(面向服务的架构),MySQL也可以当做分布式
消息队列(消息生产者程序将消息当做数据记录写入数据库,消息消费者程序查询数据库并按记录写入时间戳排序)
分布式消息队列通过消息对象分解系统耦合性,不同子系统处理同一消息;分布式服务则通过接口分解系统耦合性,
不同子系统通过相同的接口描述进行服务调用。
巨无霸系统带来的问题:1.编译,部署困难;2.代码分支管理困难;3.数据库连接耗尽;4.新增业务困难
解决方案就是拆分,将模块独立部署,降低系统耦合。拆分分为横向拆分和纵向拆分。
横向拆分(按业务分割):将复用的业务拆分出来,独立部署为分布式服务,新增业务只需调用这些分布式服务,
不需要依赖具体的模块代码,即可搭建一个快速的应用系统。而模块内的业务发生变化的时候,
只需要保持接口一致就不会影响业务程序和其他模块。
纵向拆分(按业务流分层):通过梳理业务,将较少相关的业务分离,使其成为独立的web应用。
而对于横向分割,不但需要识别可复用的业务,设计服务接口,规范服务依赖关系,
还需要一个完善的分布式服务管理框架。
web service 与 企业级分布式服务:用以整合异构系统和构建分布式系统。服务提供者通过
WSDL(Web Services Description Language,web 服务描述语言) ,向注册中心(service broker)
描述自身提供的服务接口属性,注册中心使用 UDDI(Universal Description, Discovery and Integration",
可译为“通用描述、发现与集成服务”)发布服务提供者提供的服务,服务请求者从注册中心检索到服务后,
通过 SOAP(Simple Object Access Protocol,简单对象访问协议)
和服务提供者通信,使用相关服务。
缺点:1.臃肿的注册和发现机制 2.低效的 xml 序列化手段 3.开销较高的HTTP远程通信 4.复杂的部署和维护手段
大型网站分布式服务的需求和特点:1.负载均衡 2.失效转移 3.高效的远程通信 4.整合异步架构
5.对应用最少入侵 6.版本管理 7.实时监控
分布式服务架构框架设计:SOA(面向服务的体系架构),Thrift,Dubbo
Dubbo:服务框架客户端模块通过服务注册中心加载服务提供者列表(服务提供者启动后向服务
注册中心注册自己可提供的服务接口列表),查找需要的服务接口,并根据配置的负载均衡策
略将服务调用请求发送到某台服务提供者服务器。如果服务调用失败,客户端模块会自动从
服务提供者列表选择一个可提供同样服务的另外一台服务器重新请求服务,实现服务的自动失效转移,
保证服务高可用。
可扩展的数据库:NoSQL(ColumnFamily)
利用开发平台构建网络生态圈:1.API接口(Restful,RPC,WebService) 2.协议转换 3.安全 4.审计 5.路由 6.流程