=======开篇吐槽:最近一段时间刚好碰上中秋国庆双节,而且工作任务繁重,基本很难保证有时间来写文章了=======

《可伸缩服务架构 框架与中间件》与《分布式服务架构 原理、设计与实战》是要配套捆绑着看,这营销手段,服。

这书主要介绍了在分布式系统中常规用到的一些框架组件,比如分布式ID、消息队列、缓存、RPC框架、ES等。书中大部分内容的作用更多的是整体介绍、知识点扩展、初步入门,书中贴的源代码其中很难让人认真一行一行去阅读学习。想要更深入的学习,需要在平时工作多积累丰富的项目经验,或者多看看开源项目,从而去总结和提取。

每一章介绍一个组件,摘抄一些自己觉得有用的内容,归纳整理,然后加以理解。(主要还是强迫自己形成总结成文的习惯,看的书很多,都总是很容易忘记,效果甚微

第1章 如何设计一款永不重复的高性能分布式发号器

1. 为什么不直接采用UUID?

虽然UUID能够保证唯一性,但无法满足业务系统需要的很多其他特性,比如时间粗略有序性、可反解和可制造性(说人话,就是分布式ID需要体现根据时间递增的特点,并且从ID串中能解析出一定的业务含义),同时UUID比较长,占空间大,性能较差。

2. 那基于数据库来实现呢?

即通过调整自增字段或者数据库sequence的步长来确保跨数据库的ID的唯一性,但这种方案强依赖于数据库。

实现方案,可见我:重构 - 分布式ID设计方案

3. 分布式ID的基本需求

(1)全局唯一

分布式系统保证唯一的一个悲观策略是使用锁或者分布式锁,但是这样会大大降低性能。因此利用时间的有序性,并且在时间的某个单元下采用自增序列,来达到全局唯一。

(2)粗略有序

UUID最大的问题是无序。

(3)可反解

即能从ID串能看出一定的业务含义,比如什么时候产生的,跟哪些业务功能模块相关的。

(4)可制造

不依赖发号器(如果系统崩了),也能通过一定的规律来手工处理数据。

(5)高性能

产生一个新业务,就要生成一个新ID,所以对性能要求非常高。ID的生成取决于网络I/O和CPU的性能,网络I/O一般不是瓶颈。

(6)高可用

发号器应该是满足HA的集群,同时拥有重试机制。在极端情况下,还要有本地的容错方案

4. 如何保证性能需求?

在项目初期提出性能需求,在项目进行中做性能测试来验证。

5. 获取分布式ID的几种方法

(1)REST方法

提供一个HTTP接口来获取

(2)RPC服务化方法

服务化模式通过Dubbo导出RPC服务

(3)嵌入方法

将发号器服务嵌入到业务项目中,并且提供JVM进程内的本地服务

第2章 可灵活扩展的消息队列框架的设计与实现

1. 背景介绍

消息队列多应用于异步处理、模块之间的解耦和高并发系统的削峰等场景中。

2. 线程模型

(1)同步线程模型

客户端为每个消费者流使用一个线程,每个线程负责从Kafka队列里消费消息,并且在同一个线程里处理业务。

(2)异步线程模型

客户端为每个消费者流使用一个线程,每个线程负责从Kafka队列里消费消息,并且传递消费得到的消息到后端的异步线程池中,在异步线程池中处理业务。

而后端的异步业务线程池又可细分为:

1> 所有消费者流共享线程池

此种模式可以创建更少的线程池对象,节省些许内存

2> 每个流独享线程池

使用不同的异步业务线程池来处理不同的流里面的消息,互相隔离、互相独立、不互相影响。比如,区分普通用户的消息,和VIP用户的消息,这样可以在不同业务线程池中来处理。

3. 异常处理

对于在消息处理过程中产生的业务异常,当前在业务处理的上层捕捉了Throwable,在专用的错误恢复日志中记录了出错的信息,后续可根据错误恢复日志人工处理错误消息,也可重做或者清洗数据。也可考虑采用Listener体系,对异常处理采用监听者模式来实现异常处理器的可插拔等。

4. 优雅关机

通过注册JVM退出钩子进行优雅关机。

=========================继续看下篇==========================

《可伸缩服务架构 框架与中间件》综合(1)相关推荐

  1. 可伸缩服务架构:框架与中间件

    网站 更多书籍点击进入>> CiCi岛 下载 电子版仅供预览及学习交流使用,下载后请24小时内删除,支持正版,喜欢的请购买正版书籍 电子书下载(皮皮云盘-点击"普通下载" ...

  2. python微服务框架_微服务架构框架有哪些?常用微服务架构介绍

    小伙伴们知道常用的微服务架构框架有哪些吗?上回我们介绍了一些常用的微服务架构设计模式,这次我们就来了解一下一些常用的微服务架构框架吧. 一.Dubbo Dubbo框架是由阿里巴巴开发的开源式的分布式服 ...

  3. 15 种微服务架构框架

    点击▲ "Java编程鸭"关注并标星 更多精彩 第一时间直达 作者:风平浪静如码 链接:juejin.im/post/6844904086601465870 这几年来,微服务这个概 ...

  4. 15种微服务架构框架汇总

    这几年来,微服务这个概念越来越火了,火到什么程度呢?2019年有一个统计说,两千家企业里,45%在使用微服务,16%在实验开发和测试微服务架构,24%在学习微服务准备转型,只有剩下的15%的企业没有使 ...

  5. Dubbo和Spring Cloud微服务架构的对比

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

  6. Dubbo和Spring Cloud微服务架构

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

  7. 终极对决!Dubbo 和 Spring Cloud 微服务架构到底孰优孰劣?

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

  8. java调用webservice_笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解...

    原标题:笃学私教:Java开发网站架构演变过程-从单体应用到微服务架构详解 Java开发网站架构演变过程,到目前为止,大致分为5个阶段,分别为单体架构.集群架构.分布式架构.SOA架构和微服务架构.下 ...

  9. 听听【八年阿里架构师】怎样讲述Dubbo和Spring Cloud微服务架构

    微服务架构是互联网很热门的话题,是互联网技术发展的必然结果.它提倡将单一应用程序划分成一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.虽然微服务架构没有公认的技术标准和规范或者草案,但业 ...

最新文章

  1. Xcode iOS9.3 配置包 iOS10.0 配置包 iOS10.2 配置包 could not find developer disk image
  2. 如何获取Node.js目录中存在的所有文件的名称列表?
  3. BZOJ1051 [HAOI2006]受欢迎的牛 Tarjan 强连通缩点
  4. 共用体和枚举,写写意思下
  5. Callable和Future接口的实现
  6. 怎么下载haarcascade_frontalface_default.xml
  7. java 接口和虚构_深入理解Java的接口和抽象类
  8. 《计算机网络》学习笔记 ·001【概述】
  9. CImage 对话框初始化时候显示透明 PNG
  10. springmvc ajax返回数据中文乱码
  11. Vbs脚本编程简明教程之六
  12. 极光推送java demo_极光推送JAVA代码示例
  13. Oracle重建索引
  14. [NOI 2010]航空管制
  15. 容联云(第三方短信发送)
  16. 区块链技术在创造共享经济方面胜过互联网
  17. SRT软体机器人:等风来不如追风去,“万米蓝海”的探索才刚开始
  18. 使用adb命令修改build.prop文件
  19. (转)超全整理!Linux性能分析工具汇总合集
  20. CASIA-SURF活体识别数据集免费免积分下载

热门文章

  1. 读取所有的AppSettings的值
  2. 测试NTC 100K 3950 测试好坏
  3. Qt pro配置软件版本号等信息
  4. 计算机专业评职称要不要工作年限,评职称必看!你的工作年限要多久才符合?...
  5. Kali工具库之Nikto
  6. aurora IP核
  7. 让你的网页逼格上升一截——wow.js的引入
  8. Java 读写二维码
  9. 史上最全的java spring注解,没有之一
  10. gateway启动报错记录nacos远程连接的坑: Waited 3000 milliseconds (plus 4100 nanoseconds delay)