今天开始聊一些微服务的实践,第一块,RPC框架的原理及实践,为什么说要搞定微服务架构,先搞定RPC框架呢?服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队的技术解耦,如下图:服务A是欧洲团队提供服务,欧洲团队的技术背景是Java,可以用Java实现服务;服务B是美洲团队提供服务,可以用C++实现服务;服务C是中国团队提供服务,可以用Go实现服务;服务的上游调用方,按照接口、协议即可完成对远端服务的调用。但实际上,99.9%的公司的团队规模有限,技术团队人数也有限,基本是使用同一套技术体系来调用和提供服务的:这样的话,如果没有统一的服务框架,RPC框架,各个团队的服
1
基于微服务或者SOA的自动化测试系统每个公司都有自己的特有的,我今天就主要介绍一下,我们研发的一套mock测试系统。我公司目前用的是基于Dubbo的微服务改造,服务之间的调用链路冗长,每个服务又是单独的团队在维护,每个团队又在不断的演进和维护各个服务,那么对测试人员将是非常大的挑战。测试人员每次进行功能测试的时候,测试用例每次都需要重新写一遍,无法将测试用例的数据沉淀,尤其是做自动化测试的时候,测试人员准备测试数据就需要很长时间,效率非常低。目前接口自动化测试框架也多种多样,testng,junit,Fitnesse等,但都需要测试人员具备测试代码编写能力,如果要做好和手工接口测试一样效果的自
1
今天阅读了两篇关于微服务的文章,总结一些笔记,不敢贸然翻译:一是因为水平不够,翻译的过程会丢掉作者的原意;二是因为技术翻译是一个略微吃力不讨好的活。微服务(microservices)这个概念不是新概念,很多公司已经在实践了,例如亚马逊、Google、FaceBook,Alibaba。微服务架构模式(MicroservicesArchitecturePattern)的目的是将大型的、复杂的、长期运行的应用程序构建为一组相互配合的服务,每个服务都可以很容易得局部改良。Micro这个词意味着每个服务都应该足够小,但是,这里的小不能用代码量来比较,而应该是从业务逻辑上比较——符合SRP原则的才叫微服
2021-02-25 20:04:40 367KB 基于微服务的软件架构模式
1
微服务架构解决了很多问题,但是同时引入了很多问题。本文要探讨的是如何解决下面这几个问题。依赖的微服务调用失败了,我应该失败,还是成功。依赖很多外部服务之后,自身如何保障稳定性。如果所有依赖的服务成功,我才算成功,自身的稳定性就堪忧了。如果调用失败时,选择跳过。那么因此产生的数据不一致性问题如何修复?平时毛毛雨,可以忽略。但是大故障之后,人工还是要来擦屁股的,这个成本就特别高。使用消息队列的最大的意义是在让消息可以在故障的时候堆积起来,等故障恢复了再慢慢来处理,减少人工介入的成本。依赖消息队列做系统解耦的时候,怎么确保消息自身是可靠入队列的?消息是否需要先可靠写入队列,然后再提交数据库事务?如果
1
2019年多家公司整理的350道Java面试题手册,分布式+微服务+高并发
2021-02-25 17:23:55 2.35MB Java 分布式 微服务 高并发
1
自包含系统(SCS)与微服务有很多相似的特征。它们都可以独立部署,并以解耦系统为目的。不过,SCS一般具有更粗的粒度和更精确的定义。每一个SCS都是一个自主的Web应用,包含了WebUI、业务逻辑和持久化层。对于SCS来说,API是一个可选项,而且SCS不应该共享UI,当然,那些调用了多个服务的单页应用(SPA)除外。在进行领域驱动设计(DDD)时,为了尽可能降低SCS之间的耦合,每个SCS都应该实现一个边界上下文(BoundedContext)。可以通过对用户故事进行来定义边界上下文。SCS之间可以通过多种方式进行交互:UI集成,如引用JavaScript文件、ESI或SSI;异步通信和事件
1
上图是互联网典型的高可用架构,大部分公司如果没有使用微服务,正在使用这样的架构:1.用户端是浏览器browser,APP客户端2.后端入口是高可用的nginx集群,用于做反向代理3.中间核心是高可用的web-server集群,研发工程师主要在这一层进行编码工作4.后端存储是高可用的db集群,数据存储在这一层。更典型的公司,web-server层是通过DAO/ORM等技术来访问数据库。最初的架构都没有服务层,这样的架构会遇到怎样的痛点?对于没有使用微服务架构的公司来说,要不要升级到微服务架构呢?回答这个问题之前,先来看看您是否遇到和58同城及58到家类似的架构痛点:。A、B、C业务线,如果没有微
1
简单地说,我们从事视频输出方面的工作——我们提供实时的视频。我们负责“NTV-Plus”和“MatchTV”频道的视频平台。该平台有30万的并发用户,每小时输出300TB的内容。这是一个很有意思的任务。那么我们是如何做到的呢?这背后都有哪些故事?这些故事都是关于项目的开发和成长,关于我们对项目的思考。总而言之,是关于如何提升项目的伸缩能力,承受更大的负载,在不宕机和不丢失关键特性的情况下为客户提供更多的功能。我们总是希望能够满足客户的需求。当然,这也涉及到我们是如何实现这一切,以及这一切是如何开始的。在最开始,我们有两台运行在Docker集群里的服务器,数据库运行在相同机器的容器里。没有专用的
2021-02-25 16:06:45 2.75MB 高负载微服务系统的诞生过程
1
我一直在用draw.io做一些和UML流程图,图表或者曲线图相关的事情。它在丰富的功能和用户的手工控制方面做出了合理的权衡。但是,接下来我会告诉你如何自动化一些无聊的鼠标点击;)DanielWoods的“Microservices:TheRightWay”演讲里其中一张幻灯片如果它不是这样的话事情也不会变得这么有趣。事实上,这里最好能有一张更清晰地展现组件之间关系和职责的图片。不然的话最终结果就是像上面看到的这样;)诀窍便是在做的时候不断审视它哪个地方不对,这样一来便不太可能做的这么糟了。在做图的时候——你也在同时给自己一个整体的感觉,它们将会怎么交互,问题域是什么,上下文,边界,等等。"光纸
1
简单来说,服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基础上要更彻底地去耦合(不再共享DB、KV,去掉重量级ESB),并且强调DevOps和快速演化。这就要求我们必须采用与一站式时代、泛SOA时代不同的技术栈,而SpringCloud就是其中的佼佼者。DevOps是英文Development和Operations的合体,他要求开发、测试、运维进行一体化的合作,进行更小、更频繁、更自动化的应用发布,以及围绕应用架构来构建基础设施的架构。这就要求应用充分的内聚,也方便运维和管理。这个理念与微服务理念不谋而合。接下来我们从服务化架构演进的角度来看看为什么Spring
1