扩展性架构设计,在对现有系统影响最小的情况下,系统功能可持续扩展以及提升的能力。

架构设计考虑未来功能扩展,当系统增加新功能时候,不需要对现有系统的结构和代码进行修改。

伸缩性是指通过增加自身资源规模的方式增强自己处理计算处理事务的能力。

开发低耦合系统是软件设计的终极目标之一,低耦合系统更容易扩展,低耦合的模块更容易复用。

将一个大系统切分为N个低耦合子模块,横向的业务模块,纵向的基础技术模块。

设计网站可扩展架构的核心思想是模块化,在此基础上,降低模块间的耦合性,提高模块的复用性。

利用分层和分割的方式将软件分割程若干个低耦合的独立组件模块,这些组件模块以消息传递以及依赖调用的方式聚合程一个完整系统。

大型网站中,模块通过分布式部署的方式,独立的模块部署在独立的服务器(集群)上,从物理上分离模块之间的耦合关系,进一步降低耦合性提高复用性。

模块分布式部署之后具体聚合方式有分布式消息队列和分布式服务。

利用分布式消息队列降低系统耦合性

事件驱动架构

事件驱动架构(Event Driven Architecture):生产者消费者模式,最常用的是分布式消息队列

消息队列利用发布-订阅模式工作

分布式消息队列

Apache ActiveMQ

  • 伸缩性:将新服务器加入分布式消息队列集群中
  • 可用性:如果内存队列已满,会将消息写入磁盘

利用分布式服务器打造可复用的业务平台

分布式消息队列通过消息对象分解系统耦合性,分布式服务则通过接口分解系统耦合性,不同子系统通过相同的接口描述进行服务调用。

  • 纵向拆分:拆分为多个小应用,新增的可以直接设计部署为独立的web应用系统
  • 横向拆分,将复用的业务拆分出来,独立部署为分布式服务器

分布式服务管理框架

Web Service与企业级分布式服务

整合异构系统以及构建分布式系统

服务提供者通过WSDL(web services Description Language) web服务描述语言向注册中心(Service broker)描述自身提供的服务接口属性,注册中心使用UDDI(Universal Description, Discovery and Integration)统一描述,发现和集成发布服务提供者提供的服务,服务请求者从注册中心检索到信息之后,通过SOAP(Simple Object Access Protocol)简单对象访问协议和服务提供者通信,使用相关服务

大型网站分布式服务的需求和特点

  • 负载均衡
  • 失效转移
  • 高效的远程通信
  • 整合异构系统,不同语言开发的系统
  • 对应用最少侵入,可随时选择分布式或者集中式部署
  • 版本管理,同时升级接口
  • 实时监控

分布式服务框架设计

SOA(Service Oriented Architecture)面向服务的体系架构

Facebook基于Thrift的分布式服务框架,阿里巴巴的Dubbo

服务消费者通过服务接口使用服务,服务接口通过代理加载具体服务,具体服务可以是本地的代码模块,也可以是远程服务,所以对应用侵入较少,应用程序只需要调用服务接口,服务框架根据配置自动调用本地或者远程实现。

服务框架客户端通过服务注册中心加载服务提供者列表(服务提供者启动后自动向服务注册中心注册自己可以提供的服务接口列表),查找需要的服务接口,根据配置的负载均衡策略将服务调用请求发送到某台提供者服务器,如果服务调用失败,客户端会重新从列表找一个提供同样服务的服务器,重新请求,实现服务的自动失效转移,保证服务高可用。

可扩展的数据接口

数据库的字段

利用开发平台建设网站生态圈

第三方调用平台

  • API接口
  • 协议转换
  • 安全
  • 审计
  • 路由
  • 流程

产品的内在价值在于劳动时间,劳动时间不在于个体付出的劳动时间,而在行业一般劳动时间。