其实我觉得并不复杂,核心性质的东西大都是很简单的。
架构的理念,就是不断找到系统的瓶颈和弱点,采用分而治之、缓存、异步等手段逐渐化解,并平衡处理系统各项要求(性能、安全、可用性、伸缩性、扩展性…)的过程。由此形成了架构。
很好理解,就是:兵来将挡,水来土掩。架构必须做设计规划,你必须得懂得要做什么。但是又不能过度设计,不必也不能完全抄袭大网站的做法,要适合自己。“淘宝就是这么做的!” – 你不是淘宝,你也不是谷歌。业务需求变化快,留个适度冗余就够了,不然会很浪费资源。架构是随着业务变的,如果没业务需要你变个啥。
单机思维要彻底抛弃才行。用户浏览器访问网站页面,从打开网址,到最后看到结果,中间是一个较长的操作链条。通常的访问顺序是这样:浏览器发出请求 ->DNS 解析域名 -> 浏览器连接服务器 -> 服务器访问数据库 -> 服务器计算数据结果 -> 返回数据给浏览器。文章其实就是从每个链条里面做。每个不同的动作,都有增加扩展、分解流量的机会,于是乎,架构产生,系统开始膨胀起来了。
DNS 解析域名,可以智能化解析到不同的地域,不同的服务器区域,就近分配计算资源。
浏览器连接服务器,可以使用负载均衡、反向代理等技术,接入服务器集群,把访问分散到不同的设备上,却可以返回同样的结果。
服务器访问数据库,可以根据数据库读多写少的现象,做读写分离。还可以采用 NoSQL 应用,缓存热点数据,可以分割业务区块,缓解数据库访问的压力。再后面还可以做访问代理,数据存储集群化。
服务器计算数据结果,可以采用合适的语言和技术,适度缓存数据。可以采用消息队列、RPC,异步处理,平滑访问洪峰。
返回数据给浏览器,系统可以加 CDN,静态资源就近访问。可以大力使用浏览器缓存手段,规避不需要的更新和访问需要。
看吧,每项事务,后面都是一堆学问,都是非常专业的工作。由此才需要各类专业人才通力合作完成。当然,因为 IT 产业的发展,每个链条都有不错的资源 / 专业服务商 / 软件包 / 工具链 / 中间件产品,开发出来供选择使用。具体在需要的时候,研究使用细节、如何搭配就可以了。
好多地方,是需要的时候再用。好多的事情,不遇到你也想不出关键点在什么地方,坑在哪里,所以坦然接受吧。
网站架构的常见演化路径是什么?
用图表示比较理想,这里直接抄来吧,图片来自李智慧的书《大型网站技术架构 - 核心原理与案例分析》。注意,它的变化不是固定的,千万别死板的套用,因为它是电商的,它的演化过程、设计不一定适合你的应用,要学会灵活应对。
1、初始阶段的网站架构
****2、应用服务和数据服务分离****
611f4431e01849519e395acb9b8684f0.png
****3、网站使用缓存****
30f3db267ec646e19923603f56080e12.png
****4、应用服务器集群部署****
c40cc3886ddf4af781d23a35a382d774.png
****5、数据库读写分离****
061df561a1b74f70a5d678ff2ac76e51.png
****6、网站使用反向代理和 CDN 加速访问****
bf70c6987db343c090711619a0f52e6d.png
****7、使用分布式文件和分布式数据库系统****
87e34d9666e1428f8d84b52676209acd.png
****8、使用 NoSQL 系统和搜索引擎****
742ab88c188549da8fc1fcc123b1aa90.png
****9、应用拆分****
5c50141802854717bd76b5ed1cbcd916.png
****10、分布式服务****
ccc0cc4abcc6488f87948313d42b507f.png
网站架构常用的工具包是什么?
实际上要根据需求和业务特性进行适当的选择,这些工具包都是为了解决具体问题而开发的。但是通常用的产品,基本都是 Linux 平台上的开源产品,很多中间件 / 工具包使用 Java 开发 – 它是常青树是有原因的。但中小型网站使用 PHP 也很多,因为数据的量级内还足够处理,开发又方便,成本更低。一些产品使用很广泛,比如 NoSQL 类的 Redis,已经几乎成了架构标配,甚至一开始就可以用它缓存系统的热点数据,减少数据库访问和计算。
其它工具包,在需要的时候去找合适的采用。
随着信息化社会的发展进步,新的产品 / 应用还会出现,系统的架构还会进一步演化,适应需求。
转载声明:本文转自【http://www.epubit.com.cn/article/1481】
网友评论