第7章 网站的可扩展架构
扩展性
指对现有系统影响最小的情况下,系统功能可持续或提升的能力。表现在系统基础
设施稳定不需要经常变更,应用之间较少依赖和耦合,对需求变更可以敏捷响应。
它是系统架构设计层面的开闭原则(对扩展开放,对修改关闭)
伸缩性
指系统能够通过增加(减少)自身资源规模的方式增强(减少)自己计算处理事务的能力。
软件架构师最大的价值不在于掌握多少先进的技术,而在于具有将一个大系统切分为N个低耦合模块的能力,
这些子模块包含横向业务模块,也包含纵向的基础技术模块。这种能力一部分源自专业的技术和经验,还有一部分
源自架构师对业务场景的理解,对人性的把握,甚至对世界的认知。
设计网站可扩展架构的核心思想是模块化,并在此基础上,降低模块间的耦合性,提供模块的复用性。
模块分布式部署以后具体聚合方式主要有分布式消息队列和分布式服务。
事件驱动架构:通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助事件消息的通信完成模块合作。
由于消息发送者不需要等待消息接收者处理数据就可以返回,系统具有更好的响应延迟,同时,在网站访问高峰,消息可以
暂时存储在消息队列中等消息接收者根据自身负载处理能力控制消息处理速度,减轻数据库等后端存储的负载压力。
ESB企业服务总线 SOA 面向服务架构
如果说分布式消息队列通过消息对象分解系统耦合性,不同子系统处理同一个消息;那么分布式服务则通过接口分解系统耦合性,
不同子系统通过相同的接口描述进行服务调用。
巨无霸应用带来的问题
1:编译,部署困难
2:代码分支管理困难
3:数据库连接耗尽
4:新增业务困难
解决方案:将模块独立部署,降低系统耦合性。拆分可分为纵向拆分和横向拆分。
纵向拆分:
将应用拆分为多个小应用,如果新增业务较为独立,那么就直接将其设计部署为一个独立的web应用。
横向拆分:
将复用的业务拆分出来,独立部署为分布式服务,新增业务只需要调用这些分布式服务,不需要依赖具体
的模块代码,即可快速的搭建一个应用系统,而模块内业务逻辑变化的时候,只要接口保持一致就不会
影响业务程序和其他模块。
WebService有如下缺点
1:臃肿的注册和发现机制
2:低效的XML序列化手段
3:开销相对较高的HTTP远程通信
4:复杂的部署与维护手段
大型网站分布式服务的需求与特点
负载均衡
失效转移
高效的远程通信
整合异构系统
对应用最少浸入
版本管理
因此分布式服务框架需要支持服务多版本发布,服务提供者先升级接口发布新版的服务,并同时提供旧版本的服务请求者调用,
当请求者调用接口升级后才可以关闭旧版本服务。
服务消费者程序通过服务接口使用服务,而服务接口通过代理加载具体服务,具体服务可以是本地的代码模块,也可以是远程服务,
因此对应用较少浸入:应用程序只需要调用服务接口,服务框架根据配置自动调用本地或远程的实现。
网站的价值字在于为她的用户创造价值。
第三方开发者利用这些开放的接口开放应用程序(App)或者网站,为更多的用户创造价值。
马克思的劳动价值理论告诉我们,产品的内在价值在于劳动的时间,劳动的时间不在于个体付出的劳动时间,而在于
行业一般劳动时间,资本家只会为行业一般劳动时间买单,如果你的效率低于行业一般劳动时间,对不起,请自愿加班。
反之,如果你有一个更具有扩展性的网站架构,可以更快速的开发新产品,也许你也享受不了只上半天班的福利,但是至少
在这个全行业加班的互联网领域,你能够按时下班,陪陪家人,看看星星。