动力节点首页 全国咨询热线:400-8080-105

绑定手机号,登录
手机号

验证码

微信登录
手机号登录
手机号

验证码

微信登录与注册
微信扫码登录与注册

扫码关注微信公众号完成登录与注册
手机号登录
首页 > 文章

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

03-29 17:43 3478浏览
举报 T字号
  • 大字
  • 中字
  • 小字

1.从零搭建 >

刚开始的时候,也就是创业初期或网站/产品初期,业务功能比较少,访问量也不大,通过就是采用经典的MVC架构,采用单体应用的模式进行开发,然后发布到Tomcat容器中运行,这时候我们的文件,数据库,应用都在一个服务器上,没有缓存,不追求性能优化与网站架构。

2.服务分离 >

随着业务的发展,系统功能的增多,访问用户量的增加,显然采用单台服务器已无法满足系统的负载,这时候,我们就需要提前采取相应的措施,应对访问流量的增加。由于我们是单体架构,优化架构在短时间内是不现实的,增加机器是一个不错的选择。这时候,我们可以把应用和数据库服务分开单独部署,如果有条件也可以把文件服务器单独部署。

3.集群部署 >

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

4.负载均衡 >

集群部署之后,我们不能让用户通过两个入口访问我们的服务,而是统一访问入口,此时我们可以在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协议下

5.动静分离 >

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

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

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

6.服务拆分 >

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

Dubbo

SpringCloud

服务发现——Netflix Eureka

客服端负载均衡——Netflix Ribbon

断路器——Netflix Hystrix

服务网关——Netflix Zuul

分布式配置——Spring Cloud Config

7.持续集成部署 >

服务拆分以后,随着而来的就是持续集成部署,你可能会用到以下工具:

Docker、Jenkins、Git、Maven

基本拓扑结构如下所示:

整个持续集成平台架构演进到如下图所示:

8.分布式Session >

大家都知道,服务一般分为有状态和无状态,而分布式sessoion就是针对有状态的服务。

分布式Session的几种实现方式

  • 基于数据库的Session共享
  • 基于resin/tomcat web容器本身的session复制机制
  • 基于oscache/Redis/memcached 进行 session 共享。
  • 基于cookie 进行session共享

9.读写分离 >

MySql主从配置,读写分离并引入中间件,开源的MyCat,奇虎360的Atlas,当当网的Sharding-jdbc等都是不错的选择。

10.全文检索 >

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

11缓存优化 >

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

常见的缓存服务有,Ehcache、OsCache、MemCache、Redis,当然这些都是主流经得起考验的缓存技术实现,特别是Redis已大规模运用于分布式集群服务中,并证明了自己优越的性能。

12.消息队列 >

异步通知:比如短信验证,邮件验证这些非实时反馈性的逻辑操作。

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

日志处理:系统中日志是必不可少的,但是如何去处理高并发下的日志确是一个技术活,一不小心可能会压垮整个服务。工作中我们常用到的开源日志ELK,为什么中间会加一

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

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

13.日志服务 >

消息队列中提到的ELK开源日志组间对于中小型创业供公司是一个不错的选择。

14.安全优化 >

以上种种,没有安全做保证可能都会归于零。

要配置防火墙安全策略;

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

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

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

0人推荐
共同学习,写下你的评论
0条评论
代码小兵772
程序员代码小兵772

3篇文章贡献13084字

相关课程 更多>

作者相关文章更多>

推荐相关文章更多>

Java面试题及答案整理

提枪策马乘胜追击04-21 20:01

Spring常见面试题

代码小兵92504-17 16:07

Java零基础实战项目——五子棋

代码小兵98804-25 13:57

Java string类详解

杨晶珍05-11 14:54

6道经典算法面试题

杨晶珍05-12 16:39

发评论

举报

0/150

取消