网站演进

初始阶段网站架构

应用程序、数据库、文件系统都在一台服务器上,开搞

应用服务和数据分离

应用程序单节点在单独的服务器上,数据库、文件系统分别在别的服务器上

缓存改善

缓存热点数据,应用程序访问分布式缓存、或者本地缓存来提高性能

应用服务器集群化

当单台应用服务器满足不了性能需求之后,通过扩展应用服务,来进行伸缩,挂载负载均衡服务器来提供高性能的服务

数据库读写分离

应用程序读操作会读取只读数据库,写操作时写入写数据库,读写实现主从复制,从而提高性能

反向代理和CDN技术

为了加快网站的访问,可以使用反向代理和cdn,它们的基本原理都是缓存,区别在于cdn部署在网络提供商的机房,可以让用户从离自己最近的网络机房获取数据。反向代理是部署在自己的中心机房,当发现有数据的时候,直接返回,不访问应用服务器。

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

分布式数据库是网站数据库拆分的最后手段,只有在单表数据非常大的时候,并且没有什么很好的解决方案的时候才会考虑去做。不到万不得已的时候,网站更常用的拆分手段是按业务分库,不同的业务数据库部署在不同的服务器。

nosql和搜索引擎

当网站的存储和检索需求越来越复杂时,应用程序访问统一的数据访问模块,减轻应用程序管理多数据源的麻烦。

业务拆分

对应用程序进行业务拆分,业务之间通过消息服务、网络等进行数据分发和存储

业务抽象

对不同的业务,分别进行高度抽象,聚合业务,独立部署,通过分布式调度完成整体业务线

演进小结

不论是怎么演进,任何网站都是从小到大,没有一蹴而就的大型网站。业务与技术的相互性,业务到一定的程度会成就技术,技术的进度反之推动业务增长,提高效率等。做出最适合目前的业务的技术架构才是最合适的,随着发展慢慢的增长和扩大,更是一个健康的发展规律。

架构模式

分层

分层是单一职责的体现,尽量让项目可维护和结构化,保证业务逻辑清晰。一般来讲,计算机世界,加一层可以解决很多问题,但是也会带来一些问题,具体要在项目中去权衡利弊,总归人生都是博弈,没有博弈的架构也缺少了很多刺激。

分割

保证业务的保持在一定的颗粒度和可维护性

分布式

分割和分层之后才更利于多部署,保证更高的可用性能,提供更可靠的服务。
综合考量分布式的适用情况,因为分布式也会有别的情况产生,分布式后服务调用必然通过网络,
这可能对性能开销也是有影响的,服务器越来越多,维护和管理也是个问题。
应用本身,在分布式上也存在着很多问题,不要为了分布式而分布式。
分布式:
分布式应用和服务
分布式静态资源
分布式数据和存储
分布式计算

架构要素

1.性能
2.可用性 4个9?哈哈哈
3.伸缩性
4.扩展性
5.安全性