传统的单体框架,已经不满足目前公司战略规划要求,近几年“微服务“ 这个字眼,出现的越来越频繁,虽然有过一年多微服务项目经验,也很难把微服务解释清楚,到底何为微服务?

Martin Fowler曾在其blog上发表了”Microservices“的文章,正式提出了微服务架构,对于微服务的解释,他的定义为:微服务架构是一种架构模式,他 提倡将单一应用程序,划分为一个个独立的服务,服务之间相互协调,相互配合,为用户提供最终价值。

来一张图,感受一下微服务的魅力~ 将传统一个独立的应用程序(一个程序包),划分为一个个独立的微服务(多个程序包)。

每个服务可以单独部署,启动,停止等。

部署上述微服务常用到的组件有:zookeeper redis rabbitmq,市面上组件很多,为什么在选型上定了这几个组件呢,肯定是他们几个有过人之处吧~

下面简单概述这几个中间件,入门级别的介绍,来吧,开始展示~

一:关于Rabbitmq

rabbitmq 基本概念

MQ 全称为 Message Queue,即消息队列,RabbitMQ是一种消息中间件,用于处理来自客户端的异步消息。服务端将要发送的消息放入到队列池中。接收端可以根据RabbitMQ配置的转发机制接收服务端发来的消息。RabbitMQ依据指定的转发规则进行消息的转发、缓冲和持久化操作,主要用在多服务器间或单服务器的子系统间进行通信,是分布式系统标准的配置。mq 消息队列其主要作用是异步,削峰 解耦。

关于rabbitmq 优势,为什么会选择MQ?

1、使用简单,功能强大

2、基于 AMQP 协议

3、SpringBoot 默认已集成 RabbitMQ

4、网上资料全面,讨论活跃。

5、部署简单,运维简单,方便运维。

MQ的应用场景:异步,应用解耦,流量削峰

我们以系统注册功能,简单比对传统模式和使用消息队列mq有什么区别。以便我们更好的理解mq的异步,解耦,削峰。

异步:

系统注册功能需要投资人(后面就简称靓仔)在系统注册页面填写个人信息,注册成功后会给靓仔发短信,发邮件等操作。 如果注册10s 发短信10s 发邮件10s ,整个流程下来需要30s,如果某个时间段注册的人数较多,靓仔将等待更长时间。注册过程中,短信平台或者邮件平台服务器出现错误,会直接暴露给靓仔,会导致注册失败,影响体验。实际上,将注册信息写入数据库后,发送注册邮件,在发送注册短信,并不是必须的,它只是一个通知,而这种做法让靓仔等待没有必要的。缺点:浪费时间,页面卡死或报错直接暴露给用户(想想每年双十一抢单的我们,嘤嘤嘤 提交了十次好不容易提交成功了订单 却提示,超时,服务异常,无效。5555555)

引入消息队列MQ后,把发送邮件,短信不是必要的业务逻辑异步处理,靓仔注册信息入库后,发送到消息队列服务器,那么调用链路也就可以到此结束,靓仔可以进行其他业务操作。不用等待发送短信,邮件通知。
短信,邮件平台出现错误,不会影响靓仔注册。mq监听到发送短信,邮件的信息后,以异步方式完成短信,邮件通知。异步处理的优势:将不必要同步处理,且耗时的操作有队列通知接收方进行异步处理,提高应用程序响应时间,提高用户体验

应用解耦(降低高耦合)

传统模式:双十一下单,前端系统直接调用后台服务。前端与后台存在高耦合,当后台出现故障时,订单将失败。

使用mq:用户通过前端界面下单后,前端系统完成持久化处理,将消息写入消息队列,返回前端下单成功。后台系统:读取订单的消息,获取下单信息,进行库操作。就算后台系统出现故障,消息列队也能保证消息的可靠投递,不会导致消息丢失。

流量削峰

  场景:以双十一秒杀抢购为例,一般会因为订单流量过大,导致应用挂掉,为了解决这个问题,在应用前端加入消息队列,起到缓冲作用可以控制活动人数,可以缓解短时间的高流量压垮应用。

简单消化上述知识之后,我们来浅浅了解一下,mq工作原理。

MQ工作原理:生产者、消费者和队列

发送方将消息发送到mq. 消费方监听这个mq. 一般两方都要规定一个key.

这样能保证我的消息不会被别的人消费,保证信息的私密性。

消费方监听到mq,马上处理这条消息,处理完消息删除。

1.Channel(信道):启动应用程序后,会和mq之间创建一个TCP连接,并通过mq的ip,用户名,密码进行认证。连接成功之后,应用和mq之间就创建了一个channel(AMQP信道,我理解为信息管道),后面信息发布和消息传递都是通过channel信道完成。

2.Producer(消息的生产者):消息的创建者,负责创建和推送数据到消息服务器;
3.Consumer(消息的消费者):消息的接收方,用于处理数据和确认消息;
4.Message(消息):消息由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、priority(消息优先权)、delivery-mode(是否持久性存储)等。
5.Routing Key(路由键):消息头的一个属性,用于标记消息的路由规则,决定了交换机的转发路径。最大长度255 字节。
6.Queue(消息队列):存储消息的一种数据结构,用来保存消息,直到消息发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将消息取走。需要注意,当多个消费者订阅同一个Queue,这时Queue中的消息会被平均分摊给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理,每一条消息只能被一个订阅者接收。

7.Exchange(交换器|路由器):提供Producer到Queue之间的匹配,接收生产者发送的消息并将这些消息按照路由规则转发到消息队列。交换器用于转发消息,它不会存储消息 ,如果没有 Queue绑定到 Exchange 的话,它会直接丢弃掉 Producer 发送过来的消息。交换器有四种消息调度策略(下面会介绍),分别是fanout, direct, topic, headers。
8.Binding(绑定):用于建立Exchange和Queue之间的关联。一个绑定就是基于Binding Key将Exchange和Queue连接起来的路由规则,所以可以将交换器理解成一个由Binding构成的路由表。
9.Binding Key(绑定键):Exchange与Queue的绑定关系,用于匹配Routing Key。最大长度255 字节。
10.Broker:RabbitMQ Server,服务器实体。

二: 关于ZooKeeper介绍:

ZooKeeper 是 Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册。

ZooKeeper 的架构通过冗余服务实现高可用性。

Zookeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。

一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。

在了解zk之前,我们先简单介绍 关于分布式应用

在传统单体架构的系统中,我们部署前台,后台应用,可能需要几个小时,如果遇到复杂问题,卡三天也是有的。(比如常见的各种配置错误,权限问题,人工误操作导致的各种异常),而分布式应用自动部署通过使用系统计算力,可以在几分钟内完成部署或升级。(同时部署一路或二十路,效率是一样的。)曾经部署过一家银行客户的大概30多台应用,也就用了半小时吧(傲娇)

redis。。。

太难了,---未完待续20200929

(未完待续)浅谈微服务以及 常用中间件( zookeeper redis rabbitmq)相关推荐

  1. 浅谈微服务基建的逻辑

    2019独角兽企业重金招聘Python工程师标准>>> 起点 首先,我们得有一个"服务".根据定义,我们可以把每个服务实例都视作一个黑盒.这个盒子有着明确的输入点 ...

  2. 浅谈微服务体系中的分层设计和领域划分

    1.摘要 本文阐述了一种将分层设计和DDD领域设计应用于微服务体系架构的方案实践,也是个人的最佳实践.对于互联网公司来说,我们主张将其Web服务架构分为五层:基础设施层.领域服务层.应用服务层.网关层 ...

  3. 浅谈微服务的来龙去脉

    作者:王清培(Plen wang) 沪江 公共业务平台 应用架构师 转载至沪江技术学院微信公众号 背景介绍 最近一段时间公共业务平台在进行大面积的重构,对原来的技术栈进行迁移,逐渐往Java.Go.N ...

  4. 代码重新发布后docker服务会不会受影响_分享点经验 | 浅谈微服务架构

    点击蓝字关注我们 AMP 背景简介 在最原始的系统设计中,我们通常使用单体架构.单体架构把所有的业务逻辑都写在一起,没有对业务场景进行划分.在规模比较小的情况下工作情况良好,但是随着系统规模的扩大,它 ...

  5. 微服务怎么部署到服务器的_浅谈微服务部署方案

    在项目迭代的过程中,不可避免需要"上线".上线对应着部署,或者重新部署:部署对应着修改:修改则意味着风险. 微服务目前有很多用于部署的技术,有的简单,有的复杂:有的得停机,有的不需 ...

  6. cx_oracle写日志信息_浅谈微服务架构之构建日志收集系统

    任何复杂的应用程序偶尔都会出现错误.在微服务应用程序中,需要跟踪几十甚至几百个服务发生的情况.要获取系统的整体视图,日志记录和监控至关重要.在微服务架构中,一个业务请求会经历多个服务,收集端到端链路上 ...

  7. (一)浅谈微服务概念理解

    1.什么是微服务 让我们以一个餐厅为例来解释微服务的概念. 想象一家传统的餐厅,它有一个集中式的厨房,所有的菜品都在同一个厨房中准备和烹饪.这个厨房负责接收顾客的点餐请求,准备食材,烹饪菜品,并最终将 ...

  8. 数风流人物还看今朝|前后端分离微服务项目常用中间件以及指令

    日常积累 1.常用集成开发环境(IDE) 1.1.IDEA(后端) 1.2.VSCode(前端) 2.常用中间件 2.1 .redis及其常用指令 2.1.1.启动redis服务(器) 2.1.2.关 ...

  9. 阿里技术专家浅谈微服务架构

最新文章

  1. 【Qt】Qt样式表(Style Sheet):官网说明及例子
  2. Java 的序列化和反序列化,你该知道得更多
  3. C++版数据结构继承关系图
  4. 液冷数据中心再获加持,北京数据中心PUE要低至1.118
  5. 如何强化应用安全能力,全面拦截 Log4j 漏洞攻击
  6. Vue UI 框架对比 element VS iview
  7. 程序员:如何写出杀手级简历
  8. 【Python CheckiO 题解】Time Converter (24h to 12h)
  9. jsp超链接到java文件,jsp页面超链接传中文终极解决办法
  10. 010 、JVM实战总结: 动手实验:亲自感受一下线上系统部署时如何设置JVM内存大小
  11. Log4J 最佳实践之全能配置文件
  12. css flexbox水平垂直
  13. 2021 M1 iMac 的 8 个最佳功能
  14. android 开源病毒库,ClamAV+ClamTK,开源杀毒软件
  15. TRUNK 的介绍和配置
  16. 学习Linux的第七十一天
  17. 超越之MongDB系列教程(六) MongDB的查询
  18. Qt编写的知名的开源软件汇总
  19. 安卓手机传感器采集数据并保存数据
  20. 【CV系列】图像算法之一:Randon变换

热门文章

  1. ffmpeg视频播放器专栏阅读说明
  2. logback-中文手册
  3. 贵州大学oj C++ 第五次 11.自助餐计费
  4. 如何搭建一台属于自己的服务器
  5. 某支付系统调用银行侧数字货币代发接口处理代发工资用例描述
  6. final、finally、finalized区别
  7. Mac上gif图制作工具Giphy Capture介绍与使用
  8. window查看计算机配置文件,教您如何查看计算机配置
  9. 中秋家宴 ▎食物才是最好的团圆
  10. JavaCV - 毛玻璃特效