个人笔记。
一.开发环境&生产环境
1.1开发环境
平时在写代码时,大多是在Win10/Win7/Mac, 这些系统都可以称呼为开发环境,
咱们会为了跟高效的开发应用程序, 安装很多很多软件,会导致操作系统不安全,稳定性降低。
1.2生产环境
在生产环境中,操作系统不会采用Win10/Mac,这种系统相对不安全,生产环境是要面向全体用户的, 一般会采用专业的操作系统, 大多市面上使用的都是基于Linux的操作系统,还有Windows版本的服务器操作系统,Windows 2003 service 第一知识点,学会如何操作Linux操作系统。
2.WEB1.0&WEB2.0阶段
2.1WEB1.0时期
在WEB1.0时期,由于带宽不足,这时的项目是内容少,用户量也不多,甚至有一些项目不需要对外开发, 对安全性和稳定性的要求是不高的.单体架构就足以应对
单体架构图
2.2WEB2.0时期
随之到来的WEB2.0,实现了ADSL拨号上网,宽带提速,最高可以到达8M,用户量也就不断增加, 一些门户网站也开始活跃,项目就需要考虑安全和稳定性 在基于上面的单体架构图中, 无法满足WEB2.0对项目的需求,
在单体架构的基础上去搭建集群在搭建集群之后,可以提升项目的稳定性,并且发量增加,也可以承受住
集群架构图
2.3搭建集群后发生的问题
1.用户的请求到底要发送到那台服务器上,如何请求平均的分发给不同的服务器,从而缓解用户量增加的压力
2.编写项目时,如果用户登录成功了,将用户的标识放到Session域中,在搭建集群之后,数据共享问题,
3.当数据量特别大时,如果还直接去数据库查询,速度很慢,如何提升查询效率
4.针对大家在瘦素一些数据时,where content lik '‘%#{xxx}%’
5....
为了解决上述的问题,需要使用到三门技术,
Nginx-解决请求平均分发
Redis -解决数据共享并实现缓存功能
ElasticSearch- 解决搜素数据的功能,
集群架构图
3.垂直架构
比如项目包含了三个模块,用户模块,商品模块,订单模块. 商品模块压力过大,一般最直接有效的方式就是搭建集群.在单体架构的集群上去搭建,效果相比较差.随着项目的不断更新, 项目中的功能越来越多,最严重可能会导致项目无法启动. 关于单体架构中,完美的体现了低内聚,高耦合。 为了解决上述各种问题,演进出了垂直架构.
垂直架构图
4.分布式架构
4.1项目迭代
随着项目的不断的迭代,新老功能之间需要相互交互,服务器和服务器之间是需要通讯的 项目一般是分为三层的,Controller,Service,Dao.导致程序变慢的重灾区,一般是Service和Dao,在搭建集群时, 确实针对三层都搭建集群,效果不是很好。 架构从垂直架构演变到了分布式架构. 分布式架构落地的技术. 国内通讯的方式有两种: Dubbo RPC SpringCloud HTTP
分布式架构图
5.分布式架构常见问题
5.1服务之间的异步通讯
使用分布式架构之后,服务之间的通讯都是同步的, 在一些不是核心业务的功能上,咱们希望可以实现异步通讯 为了实现服务之间的异步通讯,需要学些MQ-RabbitMO
分布式架构下,实现异步通讯图
5.2之间通讯地址的维护
由于服务越来越多,每个服务的访问地址都是一样的. 协议:地址:端口号 由于模块繁多,并且模块搭建的集群数量增加,会导致其他模块需要维护各种ip地址信息,导致项目的维护性极低,耦合性变高, 并且无法实现负载均衡的功能, 需要使用使用一个技术来解决当前问题: Eureka注册中心帮助我们管理服务信息 Robbin可以帮我们实现服务之间的负载均衡.
Eureka实现通讯地址维护 Robbin实现服务之间的负载均衡
5.3服务降级
在上述中的架构中,如果说订单模块出现了问题 只要涉及到订单模块的功能,全部都无法使用. 可能会导致服务器提供的线程池耗尽,给用户友好提示都是无法做到的. 为了解决上述的问题,使用Hystrix处理 Hystrix提供了线程池隔离的方式,避免服务器线程池耗尽,在一个喝完无法使用时,可以提供断路器的方式来解决.
使用Hystrix帮我们实现断路器和隔壁,并最终服务降级
Eureka,Robbin,Hystrix都是SpringCloud中的组件
5.4海量数据
海量数据与会导致数据无法存储全部的内容. 即便数据库可以存储海量的数据,在查询数据时,数据库的响应时及其缓慢的. 在用户高并发的情况下,数据库也时无法承受的。 为了解决上述问题,可以基于MyCat实现数据库的分库分表
基于MyCat实现分库分表
6.微服务架构
6.1 微服务架构
虽然已经将每个模块独立的做开发,比如商品模块,压力最大的是商品的查询。 在单独模块中再次拆分项目的方式就可以称之为微服架构。
微服务架构,在分布式架构的基础上再次拆分
6.2 模块过多,运维成本增加
为了解决模块过多,运维陈本增加的问题。 采用Docker容器技术来帮助我们管理。 后期在学习的时候,也需要大量的软件,可以使用Docker来帮助我们安软件.
6.3 分布式架构下的其他问题
分布式架构帮助我们解决了很多的问题,但是随之也带来了很多问题 1.分布式事务: 最传统的操作事务的方式,是通过Connection连接对象的方式操作,Spring也提供了声明事务的操作.为了解决事务的问题, 后续会使用到RabbitMQ|LCN方式来解决。 2.分布式锁:. 传统的锁方式,synchronized|Lock锁,在分布式环境下,传统的锁是没有效果的.为了解决锁的问题, 后续会使用到Redis|s|Zookeeper来解决. 3.分布式任务: 在传统的定时任务下,由于分布式环境的问题,可能会造成任务重复执行,一个比较的任务,需要可以拆分 为了解决这个问题,后续会使用到 Redis + Quartz | Elastic-Job.
总结 技术在演进。如何学习和怎么样学习,是一个问题。 学习三部曲,是什么,为什么,怎么做。 是什么, 微服务, 为什么, 现学的架无法解决现有的问题。 所有出现了微服务架构 怎么做, 如何去做。学习。



