转自:https://my.oschina.net/lwhmdj0823/blog/617713
版权声明:罗文浩所有
摘要: 一个成熟的大型网站(如淘宝、京东等)的系统架构并不是开始设计就具备完整的高性能、高可用、安全等特性,它总是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线。所以成熟的系统架构是随业务扩展而完善出来的,并不是一蹴而就;不同业务特征的系统,会有各自的侧重点,例如淘宝,要解决海量的商品信息的搜索、下单、支付,例如腾讯,要解决数亿的用户实时消息传输,百度它要处理海量的搜索请求,他们都有各自的业务特性,系统架构也有所不同。尽管如此我们也可以从这些不同的网站背景下,找出其中共用的技术...

一、最开始的网站架构

最初的架构,应用程序、数据库、文件都部署在一台服务器上,如图:

二、应用、数据、文件分离

随着业务的扩展,一台服务器已经不能满足性能需求,故将应用程序、数据库、文件各自部署在独立的服务器上,并且根据服务器的用途配置不同的硬件,达到最佳的性能效果。

三、利用缓存改善网站性能

在硬件优化性能的同时,同时也通过软件进行性能优化,在大部分的网站系统中,都会利用缓存技术改善系统的性能,使用缓存主要源于热点数据的存在,大部分网站访问都遵循28原则(即80%的访问请求,最终落在20%的数据上),所以我们可以对热点数据进行缓存,减少这些数据的访问路径,提高用户体验。

缓存实现常见的方式是本地缓存、分布式缓存。当然还有CDN、反向代理等,这个后面再讲。本地缓存,顾名思义是将数据缓存在应用服务器本地,可以存在内存中,也可以存在文件,OSCache就是常用的本地缓存组件。本地缓存的特点是速度快,但因为本地空间有限所以缓存数据量也有限。分布式缓存的特点是,可以缓存海量的数据,并且扩展非常容易,在门户类网站中常常被使用,速度按理没有本地缓存快,常用的分布式缓存是Memcached、Redis。

四、使用集群改善应用服务器性能

应用服务器作为网站的入口,会承担大量的请求,我们往往通过应用服务器集群来分担请求数。应用服务器前面部署负载均衡服务器调度用户请求,根据分发策略将请求分发到多个应用服务器节点。

常用的负载均衡技术硬件的有F5,价格比较贵,软件的有LVS、Nginx、HAProxy。LVS是四层负载均衡,根据目标地址和端口选择内部服务器,Nginx是七层负载均衡和HAProxy支持四层、七层负载均衡,可以根据报文内容选择内部服务器,因此LVS分发路径优于Nginx和HAProxy,性能要高些,而Nginx和HAProxy则更具配置性,如可以用来做动静分离(根据请求报文特征,选择静态资源服务器还是应用服务器)。

五、数据库读写分离和分库分表

随着用户量的增加,数据库成为最大的瓶颈,改善数据库性能常用的手段是进行读写分离以及分表,读写分离顾名思义就是将数据库分为读库和写库,通过主备功能实现数据同步。分库分表则分为水平切分和垂直切分,水平切换则是对一个数据库特大的表进行拆分,例如用户表。垂直切分则是根据业务不同来切换,如用户业务、商品业务相关的表放在不同的数据库中。

六、使用CDN和反向代理提高网站性能

假如我们的服务器都部署在成都的机房,对于四川的用户来说访问是较快的,而对于北京的用户访问是较慢的,这是由于四川和北京分别属于电信和联通的不同发达地区,北京用户访问需要通过互联路由器经过较长的路径才能访问到成都的服务器,返回路径也一样,所以数据传输时间比较长。对于这种情况,常常使用CDN解决,CDN将数据内容缓存到运营商的机房,用户访问时先从最近的运营商获取数据,这样大大减少了网络访问的路径。比较专业的CDN运营商有蓝汛、网宿。

而反向代理,则是部署在网站的机房,当用户请求达到时首先访问反向代理服务器,反向代理服务器将缓存的数据返回给用户,如果没有没有缓存数据才会继续走应用服务器获取,也减少了获取数据的成本。反向代理有Squid,Nginx。

七、使用分布式文件系统

用户一天天增加,业务量越来越大,产生的文件越来越多,单台的文件服务器已经不能满足需求。需要分布式的文件系统支撑。常用的分布式文件系统有NFS。

八、使用NoSql和搜索引擎

对于海量数据的查询,我们使用nosql数据库加上搜索引擎可以达到更好的性能。并不是所有的数据都要放在关系型数据中。常用的NOSQL有mongodb和redis,搜索引擎有lucene。

九、将应用服务器进行业务拆分

随着业务进一步扩展,应用程序变得非常臃肿,这时我们需要将应用程序进行业务拆分,如百度分为新闻、网页、图片等业务。每个业务应用负责相对独立的业务运作。业务之间通过消息进行通信或者同享数据库来实现。

十、搭建分布式服务

这时我们发现各个业务应用都会使用到一些基本的业务服务,例如用户服务、订单服务、支付服务、安全服务,这些服务是支撑各业务应用的基本要素。我们将这些服务抽取出来利用分部式服务框架搭建分布式服务。淘宝的Dubbo是一个不错的选择。

小结

大型网站的架构是根据业务需求不断完善的,根据不同的业务特征会做特定的设计和考虑,本文只是讲述一个常规大型网站会涉及的一些技术和手段。

转载于:https://www.cnblogs.com/lanlianggui/p/5975959.html

系统架构的演变 -----自 罗文浩相关推荐

  1. 分布式与系统架构的演变

    分布式 分布式就是把计算机通过网络连接起来协同工作.由多台计算机负责完成同一件事. SOA全称 Service-Oriented Architecture,面向服务架构,它可以根据需求通过网络对松散耦 ...

  2. 服务器系统架构的演变

    以对并发量要求比较高的电商项目为例. 1. 单服务架构--最多能应付400-500的并发量,打成一个war包,运行在一台服务器下. 存在的问题: 1.功能耦合度高. 比如说:搜索模块其中某个小功能出现 ...

  3. 从小白程序员到大厂高级技术专家,这些系统架构方案是你必须要掌握的!!

    大家好,我是冰河~~ 随着互联网的发展,互联网企业的业务也在不断的飞速发展,进而导致系统的架构也在不断的发生着变化.总体来说,系统的架构大致经历了:单体应用架构->垂直应用架构->分布式架 ...

  4. 系统架构演变和远程调用

    系统架构演变和远程调用 ​ 随着互联网的发展,网站应用的规模不断扩大.需求的激增,带来的是技术上的压力.系统架构也因此也不断的演进.升级.迭代.从单一应用 一> 垂直拆分应用 一> 分布式 ...

  5. 系统架构演变到Spring Cloud

    目录 1. 系统架构演变 1.1. 集中式架构 1.2. 垂直拆分 1.3. 分布式服务 1.4. 面向服务架构(SOA) 1.5. 微服务架构 2. 服务调用方式 2.1. RPC和HTTP 2.2 ...

  6. 启赟金融 CTO 马连浩:跨境支付系统架构

    10年支付行业老兵 \\ 马连浩, EGO 上海分会会员.启赟金融的技术合伙人\u0026amp; CTO. \\ 我在 2017 年加入启赟金融(以下简称"iPayLinks") ...

  7. 系统架构演变:SOA、微服务架构的区别和联系

    1.系统架构演变 随着互联网的发展,网站应用的规模不断扩大.需求的激增,带来的是技术上的压力.系统架构也因此也不断的演进.升级.迭代.从单一应用,到垂直拆分,到分布式服务,到SOA,以及现在火热的微服 ...

  8. 系统架构专题(1):大型互联网系统架构演变

    1.构设计话题 **须知:**在实际的工作中,不管任何一个公司均不会一开始就可以设计出合理的架构方案,而是在满足业务需求的情况下不断带带诱惑出来的这是一个持续的过 程.当然如果一开始有一个好基础系统设 ...

  9. Spring Cloud Alibaba 微服务1,系统架构演变 + Nginx反向代理与负载均衡

    目录 专栏导读 一.系统架构演变 二.什么是Nginx? 三.servername匹配规则 四.正向代理与反向代理 1.正向代理 2.反向代理 3.LVS 五.负载均衡策略 1.轮询 2.权重 3.i ...

最新文章

  1. 【转载】写博意味着什么?
  2. instanceof, isinstance,isAssignableFrom的区别
  3. 盘启动盘_[装机]推荐唯二的两个开源免费的启动盘工具,轻松创建USB启动盘
  4. Discuz验证码识别(编码篇)-写给程序员的TensorFlow教程
  5. java bufferedimage颜色_java – BufferedImage意外地改变了颜色
  6. C 语言资源大全中文版
  7. IntelliJ IDEA for Mac自定义动态代码模板快捷键(Live Templates Shortcut)
  8. matlab无法右键,GUI右键菜单不能在鼠标右键的位置显示
  9. Dockerfile最佳实践(二)
  10. HOWTO:InstallShield的Basic MSI工程中如何增加序列号输入选项
  11. poj 2442 Sequence
  12. java并发编程(1)--线程 可见性 volatile怎么用
  13. Matlab 自定义imagesc彩色渲染
  14. Google 是这样的工作氛围
  15. flutter_interview面试题和答案(2022)
  16. Seaborn实战案例 | 绘制分类条形统计图
  17. chm提示 已取消到该网页的导航的解决方法
  18. uniapp的项目,scss和js实现跑马灯
  19. python制作冰花_小学作文制作冻冰花
  20. 用计算机弹音乐我们一起猫叫,抖音上面我们一起学猫叫一起喵喵喵是什么歌 抖音学猫叫歌曲歌词...

热门文章

  1. 基本算法研究1-冒泡排序算法测试
  2. 一步一步学Silverlight 2系列(25):综合实例之Live Search
  3. WordPress /wp-admin/includes/post.php user_ID 参数操作权限提升漏洞
  4. C# 反射机制(转)
  5. matlab中的方波信号图片_基于Matlab的雷达信号处理仿真
  6. vector赋值的常见错误
  7. 新手上路之django项目开发(二)-----引入静态文件
  8. td 首行缩进_工作中常用的CSS整理
  9. Oracle修改密码文件_转载:Oracle修改用户密码
  10. HB-X打不开的解决办法