网站的可扩展架构 川长思鸟来 2022-10-30 14:28 182阅读 0赞 ## 一、什么是可扩展性 ## **扩展性(Extensibility)**,对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。 表现在系统基础设施稳定,不需要经常变更,应用之间较少依赖和耦合,对需求变更可以敏捷响应。这是系统架构设计层面的开闭原则。简单而言,就是增加或修改模块很简单,不会对其他模块造成什么影响。 扩展性跟伸缩性有所区别。**伸缩性(Scalability)**,通过增加/减少自身资源规模来增强/减少处理能力。在网站来说,就是如果要强一些,就多加几台服务器;想普通一点,节约成本,就减少一点服务器,这些都不需要对现有的软硬件设计作出什么变更。 按我的理解,扩展性,是软件范畴,伸缩性,是硬件范畴。扩展性最重要的是模块之间低耦合,伸缩性是应用负载均衡。 ## 二、可扩展的网站架构 ## 网站可扩展架构的核心思想是模块化,并在此基础上,降低模块间的耦合性,提高模块的复用性。 具体方法是通过分层、分割,将软件分割为若干个低耦合的、独立的组件模块,并分布式部署,彼此间通过消息传递、依赖调用的方式聚合成一个完整的系统。 ## 三、利用分布式消息队列降低系统耦合性 ## 如果模块之间不存在直接调用,那么新增模块或修改模块就对其他模块影响最小,这样系统的可扩展性会更好一些。 可以通过消息队列将模块粘合在一起。所用的架构为事件驱动架构。经典的架构风格有数据流、调用/返回、独立构件、虚拟机、数据仓库、SOA等几种,事件驱动就属于其中的独立构件风格。 事件驱动架构(Event Driven Architecture)通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助事件消息的通信完成模块间合作。这里面采用了生产消费者模式。 ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xlZnRmaXN0_size_16_color_FFFFFF_t_70_pic_center] ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xlZnRmaXN0_size_16_color_FFFFFF_t_70_pic_center 1] 消息生产者应用程序 通过 远程访问接口 将消息推送给消息队列服务器,消息队列服务器将消息写入本地内存队列后立即返回成功响应给消息生产者。消息队列服务器根据消息订阅列表查找订阅的消费者应用程序,将队列中的消息按照先进先出的原则通过远程通信接口发送给它们。 由于消息发送者不需要等待消息消费者处理数据就可以返回,系统有更好的响应延迟; 在访问高峰,消息可以暂时存储在队列中等候处理,可以减轻数据库等后端存储的负载压力。 ## 四、利用分布式服务打造可复用的业务平台 ## 使用分布式服务是降低系统耦合性的另一个重要手段。如果说分布式消息队列通过消息对象分解系统耦合性,不同子系统处理同一个消息,那么分布式服务则是通过接口,不同子系统通过相同接口进行服务调用。 对应的架构是[SOA][]。 ## 五、可扩展的数据结构 ## 关系型数据库设计库表的时候,需要指定schema:字段名称,数据类型等,并严格遵循特定的设计范式。这些规范带来的一个问题就是僵硬的数据结构难以面对需求变更带来的挑战。有些设计师通过预留冗余字段来应对,但这显然是一个种糟糕的设计。 应对之道可以采用NoSql。NoSql放弃了严格的范式约束,存储结构可以较为松散。例如可以采用ColumnFamily(列族),甚至干脆采用文档型,等等。 [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xlZnRmaXN0_size_16_color_FFFFFF_t_70_pic_center]: /images/20221024/c9d7c5bb7267473a8b7a6a9d1caadd81.png [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xlZnRmaXN0_size_16_color_FFFFFF_t_70_pic_center 1]: /images/20221024/141be1d0fc494f2d958e8c0e1f6d48f2.png [SOA]: https://blog.csdn.net/leftfist/article/details/84900172
还没有评论,来说两句吧...