2019独角兽企业重金招聘Python工程师标准>>>

扩展性是指对现有系统影响最小的情况下,系统功能可持续扩展或提升的能力。

设计网站可扩展架构的核心思想是模块化,并在此基础上,降低模块间的耦合性,提供模块的复用性。模块通过分布式部署,独立的模块部署在独立的服务器上(集群)从物理上分离模块之间的耦合关系。

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

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

如果模块之间不存在直接调用,那么新增模块或者修改模块对其他模块影响最小,这样系统的可扩展性无疑更好一些。

        事件驱动框架:通过在低耦合的模块之间传输事件消息,以保持模块的松散耦合,并借助事件消息的通信完成模块间合作,典型的架构就是生产者消费者模式。在大型网站架构中,具体实现手段很多,最常用的就是分布式消息队列,如下图所示:

消息队列利用发布-订阅模式工作,消息发送者发布消息,一个或者多个消息接收者订阅消息。

由于消息发送者不需要等待消息接受者处理数据就可以返回,系统具有更好的响应延迟;同时,在网站访问高峰,消息可以暂时存储在消息队列中等待处理,减轻数据库等后端存储的负载压力。

目前开源的和商业的分布式消息队列产品有很多,比较著名的有Apache ActiveMQ等,如下是分布式消息队列的架构原理:

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

使用分布式服务是降低系统耦合性的另一个重要手段。如果说分布式消息队列通过消息对象分解系统耦合性,不同子系统处理同一个消息;那么分布式服务则通过接口分解系统耦合性,不同子系统通过相同的接口描述进行服务调用。

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

  1. 负载均衡
  2. 失效转移
  3. 高效的远程通信
  4. 整合异构系统
  5. 对应用最小入侵
  6. 版本管理
  7. 实时监控

目前国内有较多成功实施案例的开源分布式服务框架是阿里巴巴的Dubbo,下图是Dubbo的架构原理:

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

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

3、利用开放平台建设网站生态圈

大型网站为了更好的服务自己的用户,开放更多的增值服务,会把网站内部的服务封装成一些调用接口开放出去,共外部的第三方开发者使用,这个提供开放接口的平台被称作开放平台。

开放平台是网站内部和外部交互的接口,外部需要面对众多的第三方开发者,内部需要面对网站内诸多的业务服务。虽然每个网站的业务场景和需求都不相同,但开发平台的架构设计却大同小异,如下图所示:

API接口:是开发平台暴露给开发者使用的一组API,其形式可以是RESTfull,WebService,RPC等各种形式。

协议转换:将各种API输入转换成内部服务可以识别的形式,并将内部服务的返回封装成API格式。

安全:除了一般应用需要的身份识别、权限控制等安全手段,开放平台还需要分级的访问带宽限制,以保证资源被公平合理的使用。

审计:记录第三方应用的访问情况并进行监控、计费等。

路由:将开放平台的各种访问路由映射到具体的内部的服务。

流程:将一组离散的服务组织成一个上下文相关的新服务,隐藏服务细节,提供统一接口供开发者调用。

转载于:https://my.oschina.net/zhanghaiyang/blog/606788

大型网站技术架构(七)网站的可扩展性架构相关推荐

  1. 阅读《大型网站技术架构:核心原理与案例分析》第五、六、七章

    阅读<大型网站技术架构:核心原理与案例分析>第五.六.七章,结合我们的系统,分析如何增加相应的功能,提高系统的可用性和易用性. 这三章主要讲述的是网站的可用性.伸缩性和可扩展性. 高可用架 ...

  2. 读书笔记 之《软件架构设计: 大型网站技术架构与业务架构融合之道》

    大家好呀,我是小菜~ 帅哥美女,知道你们时间宝贵,那么就由小菜为你读好一本书,读一本好书,取其精华,与你共享~! 本文主要分享 <软件架构设计:大型网站技术架构与业务架构融合之道> 如有需 ...

  3. 大型网站技术架构笔记(7-8章)随需应变:网站的可扩展架构; 固若金汤:网站的安全架构

    ​第七章 随需应变:网站的可扩展架构 扩展性:只对现有系统形象最小的情况下,系统的可持续扩展或提升能力. 伸缩性:指系统通过增加(减少)自身资源规模的方式,增加(减少)系统计算处理事务的能力. 7.1 ...

  4. 小白入门:大型网站技术架构负载均衡技术介绍及学习资源推荐

    十年间,负载均衡的前沿技术层出不穷,令用户眼花缭乱.经常在技术网站.文档中出现的"四层负载均衡"."七层负载均衡"字眼有什么含义?有什么区别?对客户网络有哪些不 ...

  5. 读书笔记-大型网站技术架构(核心原理与案例分析)

    一.大型网站架构演化 1.1 大型网站软件系统的特点 高并发.大流量:高可用:海量数据:用户分布广泛,网络情况复杂:安全环境恶劣:需求快速变更,发布频繁:渐进式发展: 1.2 大型网站架构演化发展历程 ...

  6. 各种大型网站技术架构

    引言近段时间以来,通过接触有关海量数据处理和搜索引擎的诸多技术,常常见识到不少精妙绝伦的架构图.除了每每感叹于每幅图表面上的绘制的精细之外,更为架构图背后所隐藏的设计思想所叹服.个人这两天一直在搜集各 ...

  7. 大型网站技术架构:摘要与读书笔记

    花了几个晚上看完了<大型网站技术架构>(https://book.douban.com/subject/25723064/)这本书,个人感觉这本书的广度还行,深度还有些欠缺(毕竟只有200 ...

  8. 《大型网站技术架构》读书笔记之八:固若金汤之网站的安全性架构

    一.网站应用攻击与防御 二.信息加密技术与密钥安全 三.信息过滤与反垃圾 四.电子商务风险控制 五.学习总结 转眼之间,<大型网站技术架构>的读书笔记到此就结束了.最近时间非常紧,因此本篇 ...

  9. 《大型网站技术架构》读书笔记之七:随需应变之网站的可扩展架构

    来源:http://www.cnblogs.com/edisonchou/p/3862389.html 此篇已收录至<大型网站技术架构>读书笔记系列目录贴,点击访问该目录可获取更多内容. ...

  10. 大型网站技术架构03

    永无止境:网站的伸缩性架构 1. 所谓网站的伸缩性是指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务能力. 2. 网站架构的伸缩性设计: 1). 不同功能进行物理 ...

最新文章

  1. 联通、华为《5G室内覆盖》白皮书!
  2. js经典试题之ES6
  3. etcd 多台服务器集群
  4. Java项目中如何更优雅的处理空值?
  5. 微信小程序怎么在wxml中插入多个图片_兰州小程序开发流程费用推荐品牌_便企网...
  6. html5子页面无法弹出,弹出子页面,兼容ie
  7. 计算机系统层次中 从上层,在计算机系统层次结构中下层是上层的上层是下层的一个.ppt...
  8. Win10首次启动出现计算机意外地重启或遇到错误的解决方法
  9. antd upload手动上传_基于MVVCTP5的文件上传
  10. Android开发之PullToRefresh的Click点击事件的监听实现长按删除Item
  11. python中 是什么运算_“是”运算符在Python中做了什么?
  12. docker 自定义网络
  13. Matlab-16QAM调制与解调 16-QAM星座点图 16-QAM在AWGN信道下的误码率和误比特率性能,仿真值与理论值曲线对比图
  14. “飞天”就是一个操作系统,最重要的功能就是资源管理;这套系统简单说就是把所有资源抽象成一台计算机,并通过互联网提供计算服务。...
  15. 聚类分析(cluster analysis)
  16. Anaconda4.5.1+tensorflow2.1.0+keras2.3.1+theano+Mingw+python3.6安装总结
  17. 开源盛世 Linux 资源导航 —★—
  18. 【量化投资实训】基于MATLAB实验一.简单移动平均线MA
  19. 商业数据分析师——IT和商业之间的纽带
  20. OSChina 周一乱弹 ——用电脑搞了个烹饪料理机 !

热门文章

  1. Win7:“找不到该项目”错误解决大法
  2. IOS 笔试题(二)
  3. 诚信,聪明,快乐,地位与竞争
  4. Python学习01 Hello World
  5. 为Qt扩展QextSerialPort类
  6. RADIUS协议:认证与计费的鼻祖
  7. linux的帮助命令及区别,Linux命令及帮助
  8. python语法知识_Python基础语法知识汇总(学习党的最爱!)
  9. js remove 当前元素_D3.js入门教程
  10. 教你如何找出 .NET 进程中的所有托管异常