1、概述
分布式:一个业务分拆多个子业务,部署在不同的服务器上,这样的话服务与服务之间更好的按照职责和功能划区分,都做自己擅长的部分,使得源有更好的分配
分布式系统:多个能独立运行的计算机(称为结点)组成。各个结点利用计算机网络进行信息传递,从而实现共同的“目标或者任务”。
J2EE应用常用架构以及分布式框架的特点等:
1、原始版
特点:
(1)单节点
(2)几乎无容灾:只有一台机器,出现问题服务器挂了,只能重启
(3)负载能力低:承受不要压力
(4)维护简单
2、动静分离版
特点:
(1)Nginx 访问静态资源
(2)Nginx 实现负载均衡
(3)应用分离:和Js、HTML、资源图片等分离
(4)依赖框架:通过开发框架来减少开发时间、成本等等。。。
(5)Session 持久化问题:因为应用不在同一机器
3、缓存版
特点:
(1)大量使用缓存:key/value结构简单易用,效率高速度高,来达到提升服务的性能。
列如:
(1)先到缓存数据里查询没有结果在去数据库里去查询,并写入到缓存数据库中
(2)Nginx接收Https请求,再将Https 请求转换成Http 请求,提高了安全性。
(3)Session持久化:将Session存入缓存数据库中进行持久化,可以解决负载均衡Session丢失等问题
(4)一致性问题 :缓存数据库没有和数据库同步,导致数据没有及时更新。(5)缓存失效问题
4、分布式服务
5、弹性计算
6、常见服务治理方式
高并发系统的设计需要注意一下几点:
尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能。
用jprofiler等工具找出性能瓶颈,减少额外的开销。
优化数据库查询语句,减少直接使用hibernate等工具的直接生成语句(仅耗时较长的查询做优化)。
优化数据库结构,多做索引,提高查询效率。
统计的功能尽量做缓存,或按每天一统计或定时统计相关报表,避免需要时进行统计的功能。
能使用静态页面的地方尽量使用,减少容器的解析(尽量将动态内容生成静态html来显示)。
解决以上问题后,使用服务器集群来解决单台的瓶颈问题。
基本上以上述问题解决后,达到系统最优。