073. 互联网系统架构演进之路

 

1. 互联网技术演进之路


1. 初生

  • 无名的网站 -> 访问量低,一台服务器知足需求。

image-20200604190425053

  • 典型的技术 LAMP:Linux + Apache + MySQL + PHP

2. 发展问题

  • 性能愈来愈差
  • 愈来愈多的数据致使存储空间不足

3. 应用服务和数据服务分离

image-20200605071050446

  • 服务器对应不一样的硬件需求
    • 应用服务器:须要更快更强大的 CPU(处理大量的业务逻辑)
    • 数据库服务器:须要更快的硬盘和更大的内存(快速磁盘检索和数据缓存)
    • 文件服务器:须要更大的硬盘(存储大量用户上传的文件)
  • 不一样的服务器承担不一样的角色
    • 并发处理能力。
    • 数据存储空间。

4. 发展问题

  • 数据库压力太大致使访问延迟,进而影响整个网站的性能,用户体验受到影响。

5. 使用缓存改善性能

image-20200605071608908

  • 缓存
    • 本地缓存(能存的数据量较少,而且会与应用程序争夺内存)
    • 远程分布式缓存

6. 发展问题

  • 可以处理的请求链接有限,网站访问高峰期,应用服务器成为整个网站的瓶颈。

7. 应用服务器集群

image-20200605071907534

  • 负载均衡
    • 软件:Apache、Nginx、Reverse-proxy、pWEB、LVS
    • 硬件:F5
    • DNS 负载均衡

8. 发展问题

  • 有一部分读操做(缓存访问不命中,缓存过时)和所有的写操做要访问数据库,当用户达到必定规模后,数据库由于负载压力太高而成为整个系统的瓶颈。

9. 数据库读写分离

image-20200605072525734

  • 数据访问模块
    • 在 Mybatis 中开发插件
    • Mycat
    • Sharding-JDBC

10. 发展问题

  • 用户规模愈来愈大,发布地域愈来愈广,地域网络环境差异很大,面临问题:如何保证用户的访问体验,不至于因访问慢而流失用户?

11. 反向代理和 CDN 加速

image-20200605073035372

  • 加快用户访问响应速度。
  • 减轻后端服务器的负载压力。

12. 发展问题

  • 单文件服务器、单数据库服务器,面临问题:存不下日益增加的数据。

13. 分布式文件系统和分布式数据库系统

image-20200605073513654

  • 适合存储小文件、图片的分布文件系统
    • FastDFS
    • TFS
  • 数据访问模块
    • Mycat
    • Sharding-JDBC

14. 发展问题

  • 随着业务的发展,数据的存储需求和检索需求愈来愈复杂,面临的问题:
    • 存储的字段差别较大,骷髅表。
    • 复杂的文本检索。

15. 使用 NoSQL、搜索引擎

image-20200605074034997

  • 搜索引擎:lucene、solr、elasticsearch
  • NoSQL:mongodb、elasticsearch

16. 发展问题

  • 网站越作越好,业务不断扩大,愈来愈复杂,面临的问题:应用程序将变得无比庞大,迭代周期愈来愈快,牵一发而动全身,怎样应对快速的业务发展须要?

17. 业务拆分

image-20200605094048934

  • 如大型电商网站会将首页、商铺、订单、买家等拆分不一样的产品线,分归不一样的团队负责,分红不一样的应用,独立部署。经过连接、MQ、数据存储系统创建关联。

18. 发展问题

  • 业务规模不断增大,应用拆分愈来愈小,愈来愈多,面临问题:
    • 应用间的关系愈来愈复杂,应用中存在大量相同的业务操做。
    • 后端的数据库要被成千上万应用服务器链接,数据库链接资源不足。

19. 分布式服务(服务化)

image-20200605094211865

  • 服务化的两种架构方式mongodb

    image-20200605100404510

  • 服务框架:Dubbo、SpringCloud数据库

  • 配置中心:Dubbo、SpringCloud config、Disconf(百度)、Config-toolkit(当当)、Diamond(阿里)后端

20. 发展问题

  • 数据挖掘、分析、推荐等业务需求,庞大系统的监控、问题分析等需求。

21. 大数据技术、监控、 日志分析系统

image-20200605101049503

  • 大数据:Hadoop、Spark
  • 系统监控:Zabbix、ElasticSearch+beats+Kibana
  • 集中式日志分析系统:ELK

2. 架构设计思想总结


  • 分而治之。
  • 随网站所需灵活应对。
  • 业务发展驱动技术发展,技术发展反哺业务。
  • 软件系统的价值在于它能为用户提供什么价值,在于网站能作什么,而不在于他是怎么作的。

3. 架构设计的误区


  • 一味追随大公司的解决方案。
  • 为了技术而技术。
  • 企图用技术解决全部问题。
相关文章
相关标签/搜索