架构设计基础

只有为用户创造价值才能活下去!
业务驱动技术,业务成就了技术。
避免一味地追求技术、一味的模仿大公司、企图用技术解决所有的问题。

大型网站架构演化之路:

1、初始阶段的小网站:一台服务器,服务器上部署了数据库,web容器中放了应用程序app,以及文件也在这台机器上。
应用一般也是分层开发的:MVC的模式,app是打成war包部署在tomcat等web容器中的。
架构设计基础_第1张图片


2、应用服务器和数据服务分离:网站访问量增加,一台服务器扛不住了,将DB服务器分离出去,文件服务器也分离出去。
架构设计基础_第2张图片
3、访问量继续增加,一个应用服务器又扛不住了,上应用服务器集群,使用负载均衡。
架构设计基础_第3张图片
4、数据库受不了了,读写分离,部署两台数据库服务。
架构设计基础_第4张图片
5、两台数据还是不行,访问有点慢,上缓存,本地缓存和分布式远程缓存。


6、为了加快速度,继续缓存,上CDN加速,反向代理加速。

7、数据库分表分库。加集群

8、搜索引擎。

9、分割应用系统,业务拆分。

10、做服务化。




模式:解决同一类问题而出现的解决方案,可重复。反复被实践过。


网站架构模式:
分层:上层对下层依赖和调用,合理划分边界和接口,严禁跨层次调用。(MVC)
分割:纵向分割,业务拆分。
分布式:在分层分割的前提下将应用分布式部署。
集群:无状态,可重复,提高可用性。
缓存:加快速度。CDN、反向代理、本地缓存、分布式远程缓存
异步:加快响应速度,消息队列。
冗余:集群,为了高可用,防灾备份。
自动化:运维,部署,测试,监控,失效转移,资源分配
安全:sql注入,密码,手机校验码,XSS攻击。


架构的核心要素:
性能:响应速度
可用性:四个9
伸缩性:加机器扩展集群
扩展性:添加新业务对原有业务不影响
安全性:……



性能:(就是为了让网站访问更快,同时访问的人更多)
不同人谈性能:客户,程序员,运维。
性能的指标:响应时间、并发数、吞吐量、硬件资源使用情况
性能测试:性能测试、负载测试、压力测试、稳定性测试
性能优化:web前端优化(http请求数,浏览器缓存、压缩、减少传输cookie、合理页面布局、CDN加速、反向代理加速),应用服务优化(缓存、异步处理、集群、代码优化(多线程、资源复用(数据库连接、网络通信连接、线程等,可使用单例或对象池))),存储性能优化(使用SSD)



高可用:365×24h待命
可用性度量:几个9?
可用性考核:将故障分级对应分到不同人员身上。
可用性架构从软件架构的基本分层模型(应用层、服务层、数据层)三方面来考虑:
应用层:负载均衡自动失效转移,session管理(绑定、复制、cookie、统一存放)
服务层:无状态、失效转移、分级管理、隔离、超时设置、异步调用、服务降级、幂等性
数据层:数据备份、失效转移,CAP原理
如何保证高可用性:发布时逐步替换、自动化测试、预发布验证(预发环境)、代码管理(Git)、自动化发布(周四发布)、灰度发布(AB测试)
网站监控:数据采集,服务器性能监控,监控报警自动失效转移、降级、恢复。


伸缩性:(加机器来扩展网站处理能力)
伸缩的两步走:1、应用分层、分割到不同的物理机器来扩展;2、添加机器扩大集群
集群的伸缩考虑应用层和数据层:
应用层:负载均衡的分发策略:http请求重定向、DNS重定向、http请求转发、修改IP地址、修改Mac地址
负载均衡算法:轮询、加权轮询、随机、加权随机、最小连接、IP绑定
分布式缓存集群的伸缩性设计:一致性hash算法,将所有的物理机虚拟化成多个节点均匀分布在一个二叉树环上,添加新节点时对原有节点的访问压力分摊了。
数据库的伸缩:业务分库、分表,分表需要数据访问中间件。cobar



扩展性:要能方便的添加新功能而对原有业务不造成影响
架构层面的 开闭原则(对扩展开放,对修改关闭)
设计扩展性的核心思想是模块化,模块间低耦合,可复用。
具体方案有分层分割,分布式消息队列,分布式服务。
分布式服务框架设计:参考李林峰的那本分布式服务的书,代码见MyCode。
可扩展的数据结构也是一个很好的方案:NoSQL(columnFamily列族设计,BigTable,稀疏式矩阵存储)
建设开放平台扩大生态圈,就是开放API,提供服务给第三方来做二次开发,


安全性
XSS:Cross Site Script 跨站脚本攻击,防御手段:对输入字符进行消毒,如字符转移<,<
SQL注入:预编译防御。
CSRF:Cross Site Request Forgery,跨站点请求伪造。
秘钥安全管理,加密技术
信息过滤与反垃圾:文本过滤,邮件分类,黑名单,风控


本文内容一切来源于《大型网站技术架构:核心原理与案例分析》(李智慧)
这个去年就看了的,现在又复习一下,综合复习这四本架构相关的书:《大型网站技术架构:核心原理与案例分析》、《大型分布式网站架构设计与实践》、《大型网站系统与Java中间件实践》、《分布式服务框架原理与实践》,还有微服务一直没怎么看。

感谢这些写书的人给我们普及基础知识,5星评价。
真的是开卷有益,不管读的什么书,都会接触到这种我所不知的东西而扩展视野。

你可能感兴趣的:(架构设计,架构设计)