RabbitMQ

微服务架构的前世今生(六):微服务架构带来的问题

你。 提交于 2020-07-29 05:32:02
上次讲了微服务的前世今生(五):CAP 原则与 BASE 理论,这次我们再说微服务架构的前世今生(六):微服务架构带来的问题。 一、客户端如何访问服务? 传统的开发方式,所有的服务都是本地的,客户端可以直接调用,现在按功能拆分成独立的服务,客户端如何访问? 后台有 N 个服务,前台就需要管理 N 个服务,一个服务下线/更新/升级,前台就要重新部署,这明显不符合我们拆分的理念,另外,N 个服务的调用也是一个不小的网络开销。还有一般微服务在系统内部,通常是无状态的,用户登录信息和权限管理最好有一个统一的地方维护管理(OAuth2)。 所以,一般在后台 N 个服务和客户端之间一般会一个代理(API Gateway),作用如下: - 提供统一服务入口,聚合接口使得服务对调用者透明,客户端与后端的耦合度降低 - 聚合后台服务,节省流量,提高性能,提升用户体验 - 提供安全、流控、过滤、缓存、计费、监控等 API 管理功能 二、服务之间如何通信? 因为服务都是独立部署的,所以通信也就成了问题,不过好在业界已经有很多成熟的解决方案,比如: **同步通信:** - REST(JAX-RS,Spring Boot) - RPC(Dubbo,Thrift) **异步通信:** - RabbitMQ,Kafka 三、这么多服务如何查找? 在微服务架构中,为了高可用,普遍采用集群方式构建服务

C# RabbitMq 连接池封装

为君一笑 提交于 2020-07-29 05:05:38
设计思路,基于前人的杰作,略作改造。 首先我们要知道: 1.创建Connection代价是巨大的(Rabbitmq没有实现连接池机制)。 2.基于Connection创建Channel代价小的多,理论上,一个connection创建channel次数是没有限制的。 (说得再多,还是图片具体点。)流程如下图所示: 这里做了个小小改造,就是根据系统自身的需要创建自己所需要的连接。优先使用空闲连接,而不是还没达到最大的连接限制时,优先进行创建新连接。 代码改造实现如下: public class MQHelper { private const string CacheKey_MQConnectionSetting = " MQConnectionSetting " ; private const string CacheKey_MQMaxConnectionCount = " MQMaxConnectionCount " ; // 空闲连接对象队列 private readonly static ConcurrentQueue<IConnection> FreeConnectionQueue; // 使用中(忙)连接对象字典 private readonly static ConcurrentDictionary<IConnection, bool >

flowable 工作流和 activiti 工作流的 前身后世

假装没事ソ 提交于 2020-07-29 03:50:57
关于新的activiti新团队与原有的团队重要开发人员我们罗列一下,细节如下: Tijs Rademakers,算是activiti5以及6比较核心的leader了。现在是flowable框架的leader。 Joram Barrez 算是activiti5以及6比较核心的leader了。目前从事flowable框架开发。 Salaboy Activiti Cloud BPM leader(Activiti Cloud BPM 也就是目前的activiti7框架) Tijs Rademakers以及Salaboy目前是两个框架的leader。 特此强调一点:activiti5以及activiti6、flowable是Tijs Rademakers团队开发的。 Activiti7是 Salaboy团队开发的。activiti6以及activiti5代码目前有 Salaboy团队进行维护。因为Tijs Rademakers团队去开发flowable框架了,所以activiti6以及activiti5代码已经交接给了 Salaboy团队(可以理解为离职之前工作交接)。目前的activiti5以及activiti6代码还是原Tijs Rademakers原有团队开发的。Salaboy团队目前在开发activiti7框架

腾讯T8花15天将SpringBoot细分为32部分:58实例+2项目+源码

 ̄綄美尐妖づ 提交于 2020-07-28 20:07:25
前言 如今, Springboot的诞生,让我们再也不用被Spring的繁琐配置所束缚。 Spring Boot 是当前后端开发的极佳框架。在如今纷繁的技术中尤为突出。它整合了 Spark、 ElasticsearchRabbitMQ、Redis等,实现了数据挖掘、自动预测趋势、关联分析、聚类 、概念描述、偏差检测等。 Spring Boot的配置、使用、监控、部署都很简单,它拥有完善的生态。后期如果因为项目流量太大需要切换到微服务Spring Cloud (基于Spring Boot )也会极为顺利。可以预想,未来会有越来越多的公司采用Spring Boot,更会有越来越多的开发者关注和使用Spring Boot。 SpringBoot实战派 pdf主要内容和创新: 第1章进入Spring Boot世界 第2章准备开发环境 第3章使用开发工具 基础篇 第4章Spring Boot基础 第5章分层开发Web应用程序 以上就是《SpringBoot实战派》+《Springboot精髓》+《面试专题+答案解析》总计825页,没有缺页漏页的情况,由于篇幅限制,需要以上完整内容的朋友,添加小助理vx:kaixindian331即可免费获取~ 第6章响应式编程 进阶篇 第7章Spring Boot进阶 第8章用ORM操作SQL数据库 第9章接口架构风格一RESTful 第10章集成安全框架

微服务设计 10 大反模式和陷阱!

故事扮演 提交于 2020-07-28 17:11:50
作者:飒然Hang rowkey.me/blog/2018/06/02/microservice-pitfall/ O’Reilly的电子书《Microservices AntiPatterns and Pitfalls》讲述了在微服务设计实现时十种最常见的反模式和陷阱。本文基于此书,将这十个点列出。 数据驱动迁移反模式(Data-Driven Migration) 如上图所示,此种反模式的问题在于微服务的粒度没有最终确定之前就做了数据迁移,如此当不断的调整服务粒度时,那么数据库就免不了频繁迁移,带来极大的成本。更好的方式如下图所示: 即先分离功能,数据库先保持之前的单体,等到服务粒度最终确定之后,再分离数据库。 前后端分离与不分离的本质区别 ,推荐看下。 超时反模式(The Timeout) 微服务架构是由一系列分离的服务组成的,这些服务之间通过一些远程协议进行互相之间的通信。其中牵扯到了服务的可用性和响应性问题。如下图所示: 可用性:服务消费方能够连接服务方,并可以向其发送请求。 响应性:服务方能够在消费方期望时间内给予请求响应。 为了防止服务的不可用和无法响应,通常的做法就是设置一个调用超时。此种做法表面上看是没问题的,但是试想一下如下情景:发起一个购买100个商品的请求,请求成功返回一个确认号。如果当请求超时但是请求在服务端已经成功执行了,此时这个交易实际是完成的

Spring Cloud Bus 消息总线

我的梦境 提交于 2020-07-28 08:42:24
学习在 Spring Cloud 中使用 Bus 实现消息总线,包括配置文件自动批量刷新、逐个刷新等功能。 1 概述 Spring Cloud Bus 通过轻量级的消息代理连接各个微服务,可以用来广播配置文件的更改,或者管理服务监控。在 Spring Cloud Config 分布式配置中心 一文中,我们提到, 当配置文件发生变化之后, config-server 可以及时感知到变化,但是 config-client 不会及时感知到变化 ,默认情况下, config-client 只有重启才能加载到最新的配置文件。当时我们在 config-client 中结合 actuator 中的 refresh 来解决了这个问题,但是,如果 config-client 数量很多的时候,这种方案就显得很繁琐了,不合适。本文我们结合 Spring Cloud Bus 来解决这一问题。 2 基本使用 将 spring-cloud-config 中的代码(包括 config-server/config-client )拷贝一份到 spring-cloud-bus 中(重命名为 bus-config-server/bus-config-client ),在此基础上进行修改。 首先,安装并启动 RabbitMQ 。 接着,在 bus-config-server 和 bus-config-client 中分别添加 Spring

消息中间件之:Kafka、ActiveMQ、RabbitMQ、RocketMQ

不打扰是莪最后的温柔 提交于 2020-07-28 07:16:28
《一》kafka的工作原理介绍 《二》zk搭载kafka分布式消息队列浅析 一、简介 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。 二、消息中间件的组成 2.1 Broker 消息服务器,作为server提供消息核心服务 2.2 Producer 消息生产者,业务的发起方,负责生产消息传输给broker, 2.3 Consumer 消息消费者,业务的处理方,负责从broker获取消息并进行业务逻辑处理 2.4 Topic 主题,发布订阅模式下的消息统一汇集地,不同生产者向topic发送消息,由MQ服务器分发到不同的订阅者,实现消息的 广播 2.5 Queue 队列,PTP模式下,特定生产者向特定queue发送消息,消费者订阅特定的queue完成指定消息的接收 2.6 Message 消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输。 三、主流消息中间节分类 kafka 1、不完全符合jms规范,注重吞吐量,类似udp 和 tcp 2、一般做大数据吞吐的管道 我们现在的用途就是负责在各个idc之间通信 3、量大对数据不是百分之百保证的,会有数据丢失,不是百分百送达(amq和rmq等有重发机制,而kafka没有);在吞吐量有提升

mysql读写分离在项目实践中的应用

假如想象 提交于 2020-07-27 18:55:48
工程背景介绍: 我们开发了一个万能接口,用户通过这个接口中传入数据,我们拿到数据进行复杂的逻辑处理然后再将数据各种匹配展示分发等操作,处理的流程相当庞大,接口中我们只保留了接收数据和返回一个本次请求的id的操作,其余操作都是异步到其他程序中处理的。 返回id的操作是需要和数据库进行两次连接,一次读库得到最新的id 然后把id更新到数据库。 项目出现问题: 我们以为自己的程序就像上图中的那样运行,一次请求,读库,写库,返回id,其余异步处理。但是没有考虑高并发,强压力写的性能问题,在高并发下,多个接口线程同事访问数据库,这样的情况会出现并发同步的问题,当然这点我们是考虑到了 ,使用线程锁可避免数据的幻读,重复读等。可一旦这样大量的接口线程堆积,很快服务器cpu将扛不住发生宕机! 那如果不试用线程同步锁呢,很明显不只是数据的错乱问题将发生,数据库在极大线程的访问压力下也将抗不住,cpu使用率达到85%!程序面临着瘫痪的风险。 解决方式: 1.数据库集群? 好处:增加数据库服务器,压力随之分摊到几个服务器中,减小数据库压力 坏处:硬件成本大 数据库主从问题 哈希一致性问题 单点故障问题 2.接口服务器集群 好处:访问压力被分摊到几个服务器中 线程的堆积问题得到有效解决 坏处:硬件成本大 单点故障问题 nignx负载均衡服务器的搭建 操作复杂 以上两种方案都是增加硬件成本,加大了开发难度

消息中间件ActiveMQ使用详解

元气小坏坏 提交于 2020-07-27 14:32:19
消息中间件ActiveMQ使用详解 一、消息中间件的介绍 介绍 ​ 消息队列 是指利用 高效可靠 的 消息传递机制 进行与平台无关的 数据交流 ,并基于 数据通信 来进行分布式系统的集成。 特点(作用) 应用解耦 异步通信 流量削峰 (海量)日志处理 消息通讯 …... 应用场景 根据消息队列的特点,可以衍生出很多场景,或者说很多场景都能用到。下面举几个例子: 1)异步通信 ​ 注册时的短信、邮件通知,减少响应时间; 2)应用解耦 ​ 信息发送者和消息接受者无需耦合,比如调用第三方; 3)流量削峰 ​ 例如秒杀系统; 二、消息中间件的对比 1.ActiveMQ 官网: activemq.apache.org/ 简介: ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。 特点: 支持来自Java,C,C ++,C#,Ruby,Perl,Python,PHP的各种跨语言客户端和协议 完全支持JMS客户端和Message Broker中的企业集成模式 支持许多高级功能,如消息组,虚拟目标,通配符和复合目标 完全支持 JMS 1.1 和J2EE 1.4,支持瞬态,持久

OpenStack操作笔记(1)--- 基础环境搭建

你离开我真会死。 提交于 2020-07-27 12:28:13
参考文档: OpenStack官网地址: https://docs.openstack.org/ OpenStack中文安装手册(Mitaka版): https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/ OpenStack英文安装手册: https://docs.openstack.org/install-guide/index.html 结合上面的文档内容,我自己安装的是Train版 参考视频: 老男孩OpenStack教学视频,B站链接: https://www.bilibili.com/video/BV1LJ411Y7og?from=search&seid=1640586261709664390 服务器配置(基于VMwareworkstation): controller(控制节点):centos7,1核4G,10.150.165.101 compute1(计算节点):centos7,1核1G,10.150.165.102 以下内容基于此目录顺序(就是上面那个英文安装手册内容): 一、基础环境配置(在所有节点执行) 关闭防火墙、selinux、配置时间同步、互相写入hosts解析 二、基础服务安装(跟着上面的中文手册做) 1、安装启用OpenStack库(在所有节点执行) 2、安装mariadb(在控制节点执行)