Java高并发高性能分布式框架从无到有微服务架构设计

上传人:jin****ng 文档编号:158958708 上传时间:2022-10-07 格式:DOCX 页数:7 大小:13.42KB
收藏 版权申诉 举报 下载
Java高并发高性能分布式框架从无到有微服务架构设计_第1页
第1页 / 共7页
Java高并发高性能分布式框架从无到有微服务架构设计_第2页
第2页 / 共7页
Java高并发高性能分布式框架从无到有微服务架构设计_第3页
第3页 / 共7页
资源描述:

《Java高并发高性能分布式框架从无到有微服务架构设计》由会员分享,可在线阅读,更多相关《Java高并发高性能分布式框架从无到有微服务架构设计(7页珍藏版)》请在装配图网上搜索。

1、Java 高并发高性能分布式框架从无到有微服务架构设计微服务架构模式(Microservice Architect Pattern)。近两 年在服务的疯狂增长与云计算技术的进步,让微服务架构受 到重点关注 微服务架构是一种架构模式,它提倡将单一应 用程序划分成一组小的服务,服务之间互相协调、互相配合, 为用户提供最终价值。每个服务运行在其独立的进程中,服 务与服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP的RESTful API)。每个服务都围绕着具体业务进行构 建,并且能够被独立地部署到生产环境、类生产环境等。另 外,应尽量避免统一的、集中式的服务管理机制,对具体的 一个服务而言,

2、应根据业务上下文,选择合适的语言、工具 对其进行构建。微服务架构优势 首先简单介绍了微服务(Microservices)的内涵及优势,微服务架构的本质,是用 一些功能比较明确、业务比较精练的服务去解决更大、更实 际的问题。微服务架构将服务拆分,分别采用相对独立的服 务对各方面进行管理,彼此之间使用统一的接口来进行交 流,架构变得复杂,优势也很明显: 复杂度可控:在将应 用分解的同时,规避了原本复杂度无止境的积累。每一个微 服务专注于单一功能,并通过定义良好的接口清晰表述服务 边界。由于体积小、复杂度低,每个微服务可由一个小规模 开发团队完全掌控,易于保持高可维护性和开发效率。什么 是微服务架构

3、微服务架构优势 独立部署:由于微服务具备 独立的运行进程,所以每个微服务也可以独立部署。当某个 微服务发生变更时无需编译、部署整个应用。由微服务组成 的应用相当于具备一系列可并行的发布流程,使得发布更加 高效,同时降低对生产环境所造成的风险,最终缩短应用交 付周期。 技术选型灵活:微服务架构下,技术选型是去中 心化的。每个团队可以根据自身服务的需求和行业发展的现 状,自由选择最适合的技术栈。由于每个微服务相对简单, 当需要对技术栈进行升级时所面临的风险较低,甚至完全重 构一个微服务也是可行的。 容错:当某一组建发生故障时, 在单一进程的传统架构下,故障很有可能在进程内扩散,形 成应用全局性的不

4、可用。在微服务架构下,故障会被隔离在 单个服务中。若设计良好,其他服务可通过重试、平稳退化 等机制实现应用层面的容错。 扩展:单块架构应用也可以 实现横向扩展,就是将整个应用完整的复制到不同的节点。 当应用的不同组件在扩展需求上存在差异时,微服务架构便 体现出其灵活性,因为每个服务可以根据实际需求独立进行 扩展。互联网高并发相关名词页面浏览数(page views )唯 一身份浏览量(Unique PageViews)独立访问者数量(unique visitors)重复访问者数量(repeat visitors)每个访问者的页 面浏览数(Page Views per user)高并发之前我将高

5、并发的解 决方法误认为是线程或者是队列可以解决,因为高并发的时 候是有很多用户在访问,导致出现系统数据不正确、丢失数 据现象,所以想到 的是用队列解决,其实队列解决的方式 也可以处理,比如我们在竞拍商品、转发评论微博或者是秒 杀商品等,同一时间访问量特别大,队列在此起到特别的作 用,将 所有请求放入队列,以毫秒计时单位,有序的进行, 从而不会出现数据丢失系统数据不正确的情况。 经过查资 料,高并发的解决方法有俩种,一种是使用缓存、另一种是 使用生成静态页面;还有就是从最基础的地方优化我们写代 码减少不必要的资源浪费:(1.不要频繁的 new 对象,对于在 整个应用中只需要存在一个实例的类使用单

6、例模式.对于 String的连接操作,使用StringBuffer或者StringBuilder.对于 utility 类型的类通过静态方法来访问。2. 避免使用错误的方 式,如 Exception 可以控制方法推出,但是 Exception 要保留 stacktrace 消耗性能,除非必要不要使用 instanceof 做条件判 断,尽量使用比的条件判断方式.使用 JAVA 中效率高的类,比 如ArrayList比Vector性能好。高并发-需要解决的问题一: 应用缓存二:HTTP缓存三:多级缓存四:池化五:异步并 发六:扩容七:队列高并发-应用缓存堆缓存 使用 Java 堆内 存来存储缓存

7、对象。使用堆缓存的好处是没有序列化/反序列 化,是最快的缓存。缺点也很明显,当缓存的数据量很大时, GC (垃圾回收)暂停时间会变长,存储容量受限于堆空间大 小。一般通过软引用/弱引用来存储缓存对象,即当堆内存不 足时,可以强制回收这部分内存释放堆内存空间。一般使用 堆缓存存储较热的数据。有 Guava Cache: 缓存和 ConcurrentMap 是非常相像的,但是它们也不完全一样。最 根本的区别就是,ConcurrentMap会持有所有添加的对象, 直到被显示的移除。而缓存为了限制其内存的使用,通常都 会配置成可以自动的将对象移除。在某些情况下即使不自动 移除对象也是非常有用的,如 L

8、oadingCache 它会自动加载缓 存对象。Ehcache 3.x:是一种广泛使用的开源Java分布式缓 存。王要面向通用缓存,Java EE和轻量级容器。它具有内存 和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个 gzip缓存servlet过滤器,支持REST和SOAP api等特点。 MapDB: mapdb 是一个内嵌的纯 java 的数据库,提供了并 发的HashMap、TreeMap、Queue,可以基于堆外或者磁盘来 存储数据高并发-应用缓存堆外缓存 即缓存数据存储在堆外 内存,可以减少 GC 暂停时间(堆对象转移到堆外, GC 扫 描和移动的对象变少),但是,读取数

9、据时需要序列化/反序 列化,因此会比堆缓存要慢很多。有 Ehcache 3.x、 MapDB 实现磁盘缓存 即缓存数据存储在磁道上,在JVM重启时数 据还存在的,而堆缓存/堆外缓存数据会丢失,需要重新加载。 有 Ehcache 3.x、 MapDB 实现分布式缓存 进程内缓存和磁盘 缓存,在多 JVM 实例的情况下,会存在两个问题: 1、单 机容量问题; 2、数据一致性问题(多台 JVM 实例的缓存 数据不一致怎么办?),这个问题不用纠结,既然数据允许 缓存,则表示允许一定时间内的不一致,因此可以设置缓存 数据的过期时间来定期更新数据; 3、缓存不命中时,需要 回源到DB/服务请求多变问题:每

10、个实例在缓存不命中的情 况下都会回源到 DB 加载数据,因此多实例后 DB 整体的访 问量变多了解决办法是可以使用如一致性哈希分片算法。因 此,这些情况可以考虑使用分布式缓存来解决。 可以使用 ehcache - clustered(配合 Terracotta server)实现 JAVA 进程 间分布式缓存。最好的办法是使用 redis 实现分布式缓存。高 并发- HTTP 缓存浏览器缓存是指当我们使用浏览器访问一 些网站页面或者 http 服务时,根据服务端返回的缓存设置响 应头将响应内容缓存到浏览器,下次可以直接使用缓存内容 或者仅需要去服务端验证内容是否过期即可。这样的好处可 以减少浏

11、览器和服务端之间来回传输的数据量,节省带宽提 升性能。 解决办法:内容不需要动态(计算、渲染等)速 度更快,内容越接近于用户速度越快。像 apache traffic server、 squid、varnish、nginx 等技术都可以来进行内容缓存。还有 CDN 就是用来加速用户访问的:即用户首先访问到全国各地 的 CDN 节点(使用如 ATS、Squid 实现),如果 CDN 没命中, 会回源到中央 nginx 集群,该集群如果没有命中缓存(该集 群的缓存不是必须的,要根据实际命中情况等决定),最后 回源到后端应用集群。高并发- 多级缓存(分布式缓存)高 并发-池化在应用系统开发过程中,我

12、们经常会用到池化技 术,如对象池、连接池、线程池等,通过池化来减少一些消 耗,以提升性能。 对象池通过复用对象从而减少创建对象、 垃圾回收 的开销。但是,池化不能太大,太大会影响 GC 时 的扫描时间。连接池如数据库连接池、Redis连接池、Http 连接池,通过复用 TCP 连接减少创建和释放连接的时间来提 升性能。 线程池也是类似的,通过复用线程提升性能。也 就是说池化的目的就是通过复用技术提升性能。高并发-扩容 1、读写分离:当数据库访问量还不是很大的时候,我们可 以适当增加服务器,数据库主从复制的方式将读写分离 2、 垂直分区:当写入操作一旦增加的时候,那么主从数据库将 花更多的时间的

13、放在数据同步上,这个时候服务器也是不堪 重负的;那么就有了数据的垂直分区,数据的垂直分区思路 是将写入操作比较频繁的数据表,如用户表_user,或者订单表 _orders,那么我们就可以把这个两个表分离出来,放在不同的 服务器,如果这两个表和其他表存在联表查询,那么就只能 把原来的 sql 语句给拆分了,先查询一个表,在查询另一个 虽然说这个会消耗更过性能,但比起那种大量数据同步,负 担还是减轻了不少;3、水平分区:但是往往事情不尽人意, 可能采取垂直分区能撑一段时间,由于网站太火了,访问量 又每日100w, 下子蹦到了 lOOOw,这个时候可以采取数据的 进行分离,我们可以根据 user 的 Id 不同进行分配,如采取%2、 %10 形式,当然这种形式对以后的扩展有了很大的 限制,当我由10 个分区增加到20 个的时候,所有的数据都 得重新分区,那么将是一个的很庞大的计算量;几种常见的 算法:哈希算法:就是采用user_id%的方式;范围:可以根 据 user_id 字符值范围分区,如 1-1000 为一区,1001-2000 则是另一个区等; 映射关系:就是将 user_id 存在的所对应 的分区放在数据库中保存,当用户操作时先去查询所在分 区,再进行操作

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!