当前位置: 首页 > 图灵资讯 > 技术篇> 从零到壹搭建大规模应用技术架构演进

从零到壹搭建大规模应用技术架构演进

来源:图灵教育
时间:2023-03-23 15:01:40

  从零搭建 >

  一开始,即创业初期或网站/产品初期,业务功能少,访问量小。通过使用经典的MVC架构和单个应用模式开发,然后发布到Tomcat容器中运行。此时,我们的文件、数据库和应用都在服务器上,没有缓存,不追求性能优化和网站架构。

  服务分离 >

  随着业务的发展,系统功能的增加和访问用户数量的增加,显然单个服务器的使用已经不能满足系统的负载。此时,我们需要提前采取相应的措施来应对访问流量的增加。由于我们是单体结构,优化结构在短时间内是不现实的,因此增加机器是一个不错的选择。此时,我们可以单独部署应用程序和数据库服务,如果条件允许,我们也可以单独部署文件服务器。

  集群部署 >

  为了提高服务处理能力,我们通常集群部署Tomcat容器。集群主要分为三类( 高可用集群, 负载均衡集群,科学计算集群)。负载均衡集群是我们生产中最常见的集群。

  负载均衡 >

  集群部署后,我们不能让用户通过两个入口访问我们的服务,而是统一访问入口。此时,我们可以在Tomcat容器前添加一个负载平衡代理服务器。Nginx在业内很受欢迎。当然,使用apache并非不可能。

  向Nginx反向代理服务器发送用户请求,然后反向代理将请求转发到后端应用服务器。

  严格地说,Nginx属于web服务器,通常用于处理静态html、css、js请求,Tomcat属于web容器,专门处理JSP请求。当然,Tomcat也支持html,但性能不如Nginx。

  反向代理的优点如下:

  隐藏真实的后端服务

  负载均衡集群

  高可用集群

  缓存静态内容实现动静分离

  安全限流

  压缩静态文件

  解决多服务跨域问题

  静态请求合并(HTTP/2.0后已弱化)

  防火墙

  SSL、http2

  实现负载均衡

  DNS负载均衡,一般域名注册商的DNS服务器不支持,但博主使用的阿里云分析得到了支持

  四层负载均衡(F5)、LVS),在TCP协议下工作

  七层负载均衡(Nginx、haproxy),在HTTP协议下工作

  动静分离 >

  基于上述Nginx反向代理,我们还可以实现动态和静态分离,如html等静态请求、css、js等请求交Nginx处理,动态请求分发到后端Tomcat处理。

  Nginx 升级到1.9.5+可以开启HTTP/2.0时代,加快网站访问。

  当然,如果公司有条件,CDN也是一个不错的选择,它可以加速网站的访问,提高网站的稳定性。

  服务拆分 >

  在这个分布式微服务普遍流行的时代,业内已经有了比较成熟的技术,比如阿里开源的Dubo(官方已经开始维护,可以放心使用),Spring家族的Spring。 cloud,这些技术在业内已经有了很好的生产案例。

  Dubbo

  SpringCloud

  服务发现——Netflix Eureka

  客户服务端负载均衡——Netflix Ribbon

  断路器——Netflix Hystrix

  服务网关——Netflix Zuul

  分布式配置——Spring Cloud Config

  持续集成部署 >

  服务拆分后,随之而来的是持续集成部署,您可能会使用以下工具:

  Docker、Jenkins、Git、Maven

  基本拓扑结构如下:

  整个连续集成平台架构演变如下图所示:

  分布式Session >

  众所周知,服务一般分为有状态和无状态,而分布式sessoion是针对有状态的服务。

  几种实现分布式Session的方法

  基于数据库的Session共享

  基于resin/tomcat web容器本身的session复制机制

  基于oscache/Redis/memcached 进行 session 共享。

  基于cookie session共享

  读写分离 >

  MySql主要从配置、读写分离、引入中间件、开源Mycat、奇虎360Atlas、当当网Sharding-jdbc等。

  全文检索 >

  如果有搜索业务需求,引入solr或elasticsearch也是不错的选择,不要把一切都塞进关系数据库。

  缓存优化 >

  引入缓存只是为了减轻后端数据库服务的压力,防止缓存"罢工"。

  常见的缓存服务有,Ehcache、OsCache、MemCache、Redis,当然,这些都是经得起考验的主流缓存技术,特别是Redis在分布式集群服务中得到了广泛的应用,并证明了其优越的性能。

  消息队列 >

  异步通知:如短信验证、邮件验证等非实时反馈逻辑操作。

  流量削锋:应该是消息队列中常见的场景,一般广泛应用于秒杀或促销活动。

  日志处理:日志在系统中是必不可少的,但如何处理高并发日志确实是一项技术工作。如果你不小心,它可能会压垮整个服务。为什么我们在工作中经常使用的开源日志ELK会在中间添加一个?

  Kafka或redis就是这个道理(一群人涌入和排队的区别)。

  信息通讯:点对点通信(个人对个人)或发布订阅模式(聊天室)。

  日志服务 >

  ELK开源日志组间在新闻队列中提到,是中小企业供应商的好选择。

  安全优化 >

  没有安全保障,上述种类可能归零。

  配置防火墙安全策略;

  Mysql等相关服务访问、Redis、Solr等,如果没有特殊需要,尽量使用内网访问并设置鉴权;

  尽量使用代理服务器,不要对外开放太多端口;

  HTTP/2.0https也是不错的选择。