总体架构图
1 加速网站响应
反向代理(Reverse Proxy)和CDN(Content Delivery Network内容分发网络),
CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求,一般部署在网络提供商机房中。
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端。
CDN缓存服务器现状科普 https://blog.csdn.net/charleslei/article/details/50879908
代理服务器科普&Nginx反向代理科普 https://blog.csdn.net/daybreak1209/article/details/51549031
Squid基于Linux开源反向代理器 (官网http://www.squid-cache.org)
Nginx反向代理实例配置 https://blog.csdn.net/jun55xiu/article/details/80570221
Nginx+ lua反向代理动态更新 https://www.cnblogs.com/shihuc/p/8044753.html
Nginx+Lua(OpenResty)高性能Web应用 https://www.jianshu.com/p/36f1955edb8b
2 负载均衡
将用户请求负载、均衡分发至应用服务器集群,解决高并发的用户访问量。
Nginx负载均衡实例配置: https://blog.csdn.net/jun55xiu/article/details/80570221
LVS[Linux Virtual Server]+Keepalived负载均衡服务器:
https://www.cnblogs.com/liwei0526vip/p/6370103.html
https://www.cnblogs.com/yanxinjiang/p/7905011.html
LVS创始人章文嵩 http://jm.taobao.org/2016/06/02/zhangwensong-and-load-balance/
Keepalived+Nginx+Tomcat双主模式负载均衡服务器 http://blog.csdn.net/apei830/article/details/78685885
Keepalived+Nginx+Tomcate主备模式负载均衡服务器 http://blog.csdn.net/apei830/article/details/78685855
3 应用服务器集群
提高网站并发处理能力,解决高并发。
Nginx + Tomcat 集群配置 见上述章节
Apache2.2 + Tomcat6 集群配置点击打开链接
Apache2.4.6+Tomcat7集群配置点击打开链接
应用服务器集群Session管理方案:
1) session共享: 缓存session,使用redis, memcached
开源项目:tomcat-redis-session-manager
Tomcat8参考配置 点击打开链接
Tomcat7参考配置 点击打开链接
2) Session服务器(集群)统一管理: session信息存放到session集群服务器组。当应用系统需要session信息的时候直接到session群集服务器上读取。目前大多都是使用Memcache来对Session进行存储。如图:
参考配置一 http://chenzhou123520.iteye.com/blog/1650212
参考配置二 http://blog.51cto.com/732233048/1909682
参考配置三 https://yq.aliyun.com/articles/476166?spm=a2c4e.11163080.searchblog.38.54942ec1duzbQ5
memcached-session-manager(MSM)是一个用于解决分布式tomcat环境下session共享的问题的开源解决方案。它的实现原理为以tomcat插件的方式部署在服务器,修改了servlet容器代码中的session相关代码,使其连接memcached,在memcached中创建和更新session。MSM拥有如下特性:
1) 支持Tomcat6至Tomcat8 2) 支持黏性sticky session、非黏性no-sticky session
3) 无单一故障点 4) 可处理tomcat故障转移 5) 可处理memcached故障转移
6) 插件式session序列化 7) 允许异步保存session,以提升响应速度
8) 只有当session有修改时,才会将session写回memcached 9) JMX管理&监控
Sticky 模式:tomcat session为主session, memcached为备session。Request请求到来时, 从memcached加载备session到tomcat (仅当tomcat jvmroute发生变化时,否则直接取tomcat session);Request请求结束时,将tomcat session更新至memcached,以达到主备同步之目的。
Non-Sticky模式:tomcat session为中转session, memcached1为主session,memcached 2为备session。Request请求到来时,从memcached2加载备session到tomcat,当容器中还是没有session 则从memcached1加载主session到tomcat,这种情况是只有一个memcached节点,或者有memcached1出错时,Request请求结束时,将tomcat session更新至主memcached1和备memcached2,并且清除tomcat session ,以达到主备同步之目的。
优点:不用考虑session共享问题,可专注于程序开发,不用显示编写代码,只需对服务器进行配置即可。
缺点:如想改变session策略,必须重新部署每个服务器的servlet容器。
4 分布式缓存
存储20%数据。网站访问2/8原则,80%业务集中在20%数据上,减少数据库访问压力,提高网站数据访问速度。
EhCache 实例:https://blog.csdn.net/jun55xiu/article/details/38492127
Redis集群&虚拟槽分区https://www.cnblogs.com/hjwublog/p/5681700.html
Redis 哨兵模式 https://blog.csdn.net/a67474506/article/details/50435498
https://blog.csdn.net/shouhuzhezhishen/article/details/69221517
https://blog.csdn.net/pi9nc/article/details/17735653
分布式缓存的一致性Hash算法:
https://blog.csdn.net/Jerome_s/article/details/52492862
https://blog.csdn.net/cywosp/article/details/23397179
淘宝开源Tair分布式存储引擎(源代码C++,官网没维护手册)
部署 https://www.cnblogs.com/lengfo/p/4171655.html
资料 https://wenku.baidu.com/view/57d52927ec3a87c24128c47e.html
JAVA客户端 https://github.com/alibaba/tair-java-client
5 数据库集群
防止数据库由数据量过大产生过高的负载压力,主从热备模式(主数据写->同步->从数据库读取数据)。
Mysql集群和主从区别 https://blog.csdn.net/wutian713/article/details/50682360
Mysql主从[主]模式 http://www.cnblogs.com/phpstudy2015-6/p/6485819.html#_label7
Mysql数据同步Redis方案中间件canal
http://www.cnblogs.com/duanxz/p/5062833.html
https://github.com/alibaba/canal
https://blog.csdn.net/tb3039450/article/details/53928351
分布式关系数据库中间件 Mycat
Mycat资料 点击打开链接 点击打开链接 点击打开链接
点击打开链接 点击打开链接
6 业务拆分
将业务拆分成产品线,按产品线在应用服务器集群分离、独立部署。即服务和功能纵向维度分割,如首页、商铺、订单、卖家等分割成不同的应用,应用间可采用消息队列实现关联数据的通信。
7 分布式服务(图1.10)
在图1.7基础上,按业务拆分成产品线(如首页、商铺、订单、卖家),各产品线在各自应用服务器集群分离、独立部署,势必产生大量应用系统(产品线),以及大量与数据库系统连接数,最终会导致数据库连接资源不足,拒绝服务。
为缓解此种情况,在应用系统(产品线)与数据库系统间加入、部署提供分布式服务的服务器,提取访问数据库或其它的共用业务服务,提高业务连接数据库和业务的复用性。通过分布式服务调用共用业务服务完成应用系统(产品线)具体业务操作。如微博的核心服务是微博、关系和用户,分割成独立的服务模块,每个模块部署在一组独立的服务器集群上。
注意:分布式服务是由系列共用业务服务调用、组合,每个共用业务服务可独立、集群式部署,类似于微服务。
微服务框架 Spring Could见http://blog.didispace.com/micro-serivces-arch/
8 异步
异步消息队列如下特性:1)提高系统可用性。消费者服务器宕机重启后,可继续读取消息队列内的数据。2)加快网站响应速度。3)消除并发访问高峰。
如微博中应用场景:用户发表微博后,系统只会给已被关注的粉丝们实时推送微博消息,其它所有微博用户(如浏览用户)则会在以后某个时间点逐步推送微博消息。
消息中间件Kafka https://blog.csdn.net/lizhitao/article/details/23743821
http://orchome.com/kafka/index
https://blog.csdn.net/vinfly_li/article/details/79397201
9 冗余
保证网站7*24小时连续运行,就需要一定程度的服务器冗余运行、数据冗余备份。数据库需要定期备份、存档保存,实现冷备份外,为保证线上业务高可用,还需要对数据库进行主从分离,实时同步实现热备份。
10自动化
发布过程自动化、代码管理自动化、自动化测试、自动化安全检测、自动化部署、自动化监控(报警)、自动化失效转移、自动化失效恢复、自动化降级、自动化分配资源。
11安全
网站在安全架构方面积累相应模式:身份验证-密码和手机校验码、加密、过滤、风险控制、多级安全审核。
核心要素
性能、可用性、伸缩性、扩展性、安全性
重要文档
Nginx
章亦春教程:https://openresty.org/download/agentzh-nginx-tutorials-zhcn.html
入门到精通:http://tengine.taobao.org/book/
Tengine
由淘宝网发起的Web服务器项目。它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了很好的检验。它的最终目标是打造一个高效、稳定、安全、易用的Web平台。
从2011年12月开始,Tengine成为一个开源项目,Tengine团队在积极地开发和维护着它。Tengine团队的核心成员来自于淘宝、搜狗等互联网企业。Tengine是社区合作的成果,我们欢迎大家参与其中,贡献自己的力量。
版 本:http://tengine.taobao.org/
中文文档:http://tengine.taobao.org/documentation_cn.html
OpenResty
创始人之一章亦春Github地址:https://github.com/agentzh,官网:http://openresty.org/en/
OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
Perl
《Effective Perl Programming》(由Addison—Wesley出版)、《Learning Perl》、 《ProgrammingPerl》、《Intermediate Perl》以及《Mastering Perl》
————————————————
版权声明:本文为CSDN博主「陈鋆」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jun55xiu/article/details/80830627