![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
架构
文章平均质量分 90
智秒数服.未闻
camping~candy
展开
-
用阿里云K8S搭建SpringCloud(服务发现:Consul)微服务--问题小结
导言公司原有的微服务是基于Eureka做微服务microservice间的服务发现,以及通过阿里云的Loadbalance设施实现gateway层的负载,以及通过流量权重切换实现分批发布。原来的方式保证了一定程度的微服务化,把很多重要服务的领域边界都可以划分清楚,几乎很少的服务间请求,所有的数据都在gateway层通过rxJava进行并行io请求和数据组装。保证了业务的灵活性和扩展性。随着公司业务发展,今年开始有一块跟原来业务区别较大的新产品规划。如果再按eureka去搭一套的话,机器资源是相对浪费的原创 2021-02-09 17:22:38 · 3057 阅读 · 0 评论 -
【十】分布式微服务架构体系详解——架构设计理念
前言前面几课的内容从分布式架构的一些常见场景出发,介绍了分布式的各种问题和解决方案以及目前一些比较成熟的技术实现。在实施微服务架构时,我们更多的是使用这些成熟的技术。作为一个架构师或者想在技术架构领域深耕的开发人员,对于分布式系统相关的技术不仅仅要会用。在做技术选型及方案时,更需要对这些技术的实现思路、算法以及优点和限制进行了解。本节课内容作为整个课程系列的收尾,会把微服务架构结合Docker的一些技术选型进行介绍,包括服务的持续集成、容器编排以及日志采集和安全技术做个简单的引申,希望能给各位读者一些参考原创 2020-07-28 10:29:08 · 1147 阅读 · 3 评论 -
【九】分布式微服务架构体系详解——共识问题
前言分布式架构体系中,一致性和共识是分不开的概念,一致性也是我们解决很多分布式问题的关键。比如通过一致性模型可以实现数据集群的数据复制;通过基于阻塞的2PC协议可以实现分布式的原子性提交,保证事务数据的一致。我们在07课 分布式一致性介绍了分布式一致性的一些理论,并且引出了分布式共识(Consensus)的话题。共识就是让分布式系统中所有节点都对一些值达成共识。在分布式系统中,解决共识问题可以帮助我们处理很多分布式问题,包括前一章介绍的原子提交协议,以及本章会稍后介绍的全序广播。本文主要介绍具有容错特原创 2020-07-28 10:27:45 · 1282 阅读 · 0 评论 -
【八】分布式微服务架构体系详解——分布式事务实践
前言分布式计算领域中,一个重要的场景就是共识问题。前文也简单提及过,共识即是让分布式系统中所有节点对于一些值达成共识。共识问题的处理一般用于Leader选举(比如单主复制的集群,只有主节点接受数据写入,如果这个leader 节点挂了,需要其他节点能选举出新的leader,使用选举算法需保证选举出一个新Leader)以及原子提交(跟事务ACID的A概念是一样的,分布式的原子提交需要保证所有节点都最终获得一样的数据结果,事件的操作都执行成功或者都放弃)。我们常说的分布式事务一般是指解决分布式系统的原子提交(A原创 2020-07-28 10:26:36 · 574 阅读 · 0 评论 -
【七】分布式微服务架构体系详解——分布式一致性
前言我们在前面几篇文章中介绍了,分布式环境下会有网络延迟,节点挂掉的问题。这些问题解决的理论都和分布式一致性息息相关。无论是数据存储的集群,或者微服务系统的集群,为了达到高可用性,我们希望系统能够对分布式问题有很好的容错,保证一直会给用户一个好的Response。通过本章节,我们将了解到分布式系统中的一些“可能”以及“不可能”。本文先介绍分布式系统中几个重要的理论:CAP、BASE、FLP不可能结果,以及这些理论的应用领域,可以让大家对耳熟能详的技术的背后理论有个更好的了解。然后再介绍下分布式一致性模型原创 2020-07-28 10:19:08 · 629 阅读 · 1 评论 -
【六】分布式微服务架构体系详解——分布式存储集群的事务
前言微服务架构下,比较典型的一个分布式问题就是并发。并且并发访问的资源可能分布在不同的数据存储的实例上。比如很多电商系统的下单减库存流程。订单的微服务和商品的微服务,底层的数据库是分离的。如果没有并发的事务控制,并发场景下会出现“超卖”。如果订单的DB和商品的DB是同一个库,可以使用关系型数据库支持的本地事务做处理。但分布式场景下类似的并发问题要怎么解决?这个也是分布式架构必须要处理的课题之一。为了理解并解决应用系统层面的分布式事务问题,我们需要先从最底层的存储服务的事务讲起,后续的章节基本都是围绕“分布原创 2020-07-28 10:18:08 · 707 阅读 · 0 评论 -
【五】分布式微服务架构体系详解——服务发现和服务通信
前言微服务架构的概念比容器技术早,但是却随着容器技术在13年的兴起,基于容器技术的微服务架构越来越被广泛应用。容器的轻量级部署方式很适合为每个微服务提供基础运行环境。本文会基于Docker容器,先介绍下服务发现的问题和可用的方案,然后对同步通信以及异步通信的技术做一些对比介绍。最后会结合DDD(Domain-Driven Design)的思想来分析合理的通信模型。Docker 容器的基础知识本文会略过,对Docker感兴趣的同学还可以去看看 Docker源码 ,Docker是用Go语言写的,Go语言很原创 2020-07-28 10:17:09 · 818 阅读 · 0 评论 -
【四】分布式微服务架构体系详解——数据分区
前言对于大规模的分布式集群,或者对于数据密集型应用来说,为了提高吞吐量和性能以及可用性,一般会结合使用数据复制和数据分区。数据复制将对单库的请求压力分给更多的数据库实例,数据分区将每个实例中的庞大的数据文件以一定规则切分成更小的数据文件,并可以存储到不同的磁盘(或数据节点Node)上,提高请求的并发性能,同时,增加了扩展性。本文将介绍分布式存储集群的高可用的另外一个解决方案——数据分区,以及以Mysql为示例看一些数据分区的具体实现。理解数据分区复制和分区的差别是什么?请看下面一张图:分区和分表原创 2020-07-28 10:15:45 · 539 阅读 · 1 评论 -
【三】分布式微服务架构体系详解——数据复制
前言一个高可用的分布式系统,底层的存储也是需要高性能、高可用的。上一篇介绍了一些数据存储产品,如果数据存储服务都是单库的,那么在唯一的单库发生故障时,将导致上层的微服务系统也都无法正常运行。为了加强可用性,我们需要更多的数据库节点,一个节点挂了,可以快速切换到可用的节点提供服务。有更多的节点提供服务可以带来很多好处,比如高可用、高性能,基于地理分布的数据中心可以提升用户访问速度。为了提供更好的性能和可用性,也需要解决一些复杂的问题,尤其是多Node的数据复制问题。第一篇文章中有介绍到网络延迟的问题,在多原创 2020-07-28 10:14:52 · 601 阅读 · 0 评论 -
【二】分布式微服务架构体系详解——数据存储
前言微服务架构下,很适合用DDD(Domain-Drive Design)思维来设计各个微服务。使用领域驱动设计的理念,工程师们的关注点需要从CRUD思维中跳出来。更多关注通用语言的设计、实体以及值对象的设计。至于数据仓库,会有更多样化的选择。分布式系统中数据存储服务是基础,微服务的领域拆分、领域建模可以让数据存储方案的选择更具灵活性。不一定所有的微服务都需要有一个底层的关系型数据库作为实体对象实例的存储。以一个简单的电商系统为例:“用户微服务”和“商品微服务”都分别需要关系型数据库存储结构化的关联数据原创 2020-07-28 10:13:38 · 888 阅读 · 1 评论 -
【一】分布式微服务架构体系详解——分布式系统的问题
前言无论是SOA或者微服务架构,都是必须要面对和解决一些分布式场景下的问题。如果只是单服务、做个简单的主备,那么编程会成为一件简单幸福的事。只要没有bug,一切都会按照你的预期进行。然而在分布式系统中,如果想当然得去按照单服务思想编程和架构,那可能会收获很多意想不到的“惊喜”:网络延迟导致的重复提交、数据不一致、部分节点挂掉但是任务处理了一半等等。在分布式系统环境下编程和在单机器系统上写软件最大的差别就是,分布式环境下会有很多很‘诡异’的方式出错,所以我们需要理解哪些是不能依靠的,以及如何处理分布式系统的原创 2020-07-28 10:09:41 · 879 阅读 · 1 评论 -
【0-导言】如何构建分布式系统的知识体系
对于开发工程师们来说,相信对于这种招聘要求的描述并不陌生:”熟悉分布式系统的设计和应用;熟悉分布式、缓存、消息、搜索等机制;能对分布式常用技术进行合理应用,解决问题”。 现在基本上大多数大、中型企业都会要求工程师们,除了要能在分布式环境中进行开发,还要了解其中的原理、机制,对于架构师来说还需要能够独立设计分布式系统。 分布式(计算机)系统的概念起源很早,目前已经基本涵盖了大多数系...原创 2018-09-02 21:57:48 · 3437 阅读 · 8 评论 -
分布式微服务架构的技术体系
花了一些时间对微服务架构体系的理论以及实践进行了总结。一部分课程已经整理完毕上线了。 课程链接:微服务架构的技术体系详解 课程简介: 微服务架构的技术体系、社区目前已经越来越成熟。在最初系统架构的搭建,或者当现有架构已到达瓶颈需要进行架构演进时,很多架构师、运维工程师会考虑是否需要搭建微服务架构体系。虽然很多文章都说微服务架构是复杂的、会带来很多分布式的问题,但只要我们了...原创 2018-07-10 20:55:19 · 6138 阅读 · 8 评论 -
JVM性能调优实践——性能测试篇
前言本文主要基于工作中,关于性能调优的一些零散的信息整理。总结性的信息,以测试环境为例。系统信息如下: os: Linux 64位jdk:java version “1.8.0_121”, HotSpot(TM) 64-Bit Server VMdocker version: 17.04.0-ce第一篇先整理一些性能指标。第二篇整理一下jvm的性能问题分析,以及基于dock...原创 2018-05-15 17:11:56 · 6869 阅读 · 0 评论 -
SpringData3.x以及SpringBoot2集成Elasticsearch5.x
说明关于如何在SpringBoot 1.x 的版本中集成Elasticsearch 2.x可以参考前文Elasticsearch实践(二)在Springboot微服务中集成搜索服务。2017年底,SpringData项目终于更新了Elasticsearch5.x版本的对应release版本:3.0.2.RELEASE。本文结合一个本地的示例,对于ES版本升级进行简单介绍。目前ES已经出到了6.原创 2018-01-26 11:14:50 · 15715 阅读 · 1 评论 -
领域服务、领域事件
综合前两篇总结,这篇对领域服务和领域事件做一个梳理。先说明下本文的领域服务和应用服务。SOA服务,或者应用间的RPC调用,Restful接口,或者通过消息中间件进行系统间的交互的,都可以归类为应用服务。相较之下,领域服务不一定涉及到远程调用或者重量级事务操作。所以上下文集成也就涉及到,怎样的方式去划分限界上下文,怎么样设计才能尽量减少应用服务的耦合,以及应用服务对于本地模型的防腐。领域服务概念借用《原创 2016-03-12 19:19:09 · 23163 阅读 · 0 评论 -
领域驱动设计整理——概念&架构
领域、子域、限界上下文DDD(Domain-Drive Design)的概念或者说业界的声音其实可以追溯到几十年前了。最近开始想要系统得整理一下DDD的一些东西。这一篇是一个简单的引子,也是mark一下自己接触到的概念和理解。 对于领域的概念其实很好理解,就如字面意思一样,比如出版书籍领域,广告设计领域。圈定了一定的范畴,并且在这个范畴内,所有团队成员对于某一概念的理解是一致的。比如书籍就是我们需原创 2015-12-13 16:53:15 · 21805 阅读 · 0 评论 -
基于docker-swarm搭建持续集成集群服务
前言本文只为自己搭建过程中的一些简单的记录。如果实践中有疑问,可以一起探讨。 为了能在本机(macOS)模拟集群环境,使用了vb和docker-machine。整体持续集成的几个机器设施如下: 服务节点:三个manager节点,一个worker节点。manager需要占用更多的资源,manager配置尽量高一些。swarm的manager节点的容错率是 (N-1)/2 。N是mana原创 2016-12-18 17:39:02 · 21950 阅读 · 0 评论 -
基于Redis实现分布式锁-Redisson使用及源码分析
在分布式场景下,有很多种情况都需要实现最终一致性。在设计远程上下文的领域事件的时候,为了保证最终一致性,在通过领域事件进行通讯的方式中,可以共享存储(领域模型和消息的持久化数据源),或者做全局XA事务(两阶段提交,数据源可分开),也可以借助消息中间件(消费者处理需要能幂等)。通过Observer模式来发布领域事件可以提供很好的高并发性能,并且事件存储也能追溯更小粒度的事件数据,使各个应用系统拥有更好原创 2016-04-14 13:40:26 · 34373 阅读 · 9 评论 -
基于Spring-statemachine的有限状态机(FSM)的介绍及示例
前言本文主要介绍一下状态机以及相关的一些概念。结合一个简单的订单状态流程,示例怎样在Springboot中集成Spring-statemachine。有限状态机(Finite-state machine)有限状态机(英语:finite-state machine,缩写:FSM),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。示例中以一个常见的“订单”的状态转移为例。原创 2017-11-26 20:31:19 · 52382 阅读 · 16 评论 -
Elasticsearch实践(一)用Docker搭建Elasticsearch集群
前言本系列文章主要是针对之前搭建以及实践基于springboot的搜索服务的总结。主要分为两部分: 1. 对于用Docker搭建分布式Elasticsearhc集群的一个介绍,以及一些实施中遇到问题的总结。(本篇) 2. 后面一篇会整理一下在基于Springboot的微服务体系中,如何更轻量级得使用Elasticsearhc以及一些复杂使用场景。搜索服务简述结合业务的场景,在目前的商品体系需要构原创 2017-11-18 10:21:24 · 25986 阅读 · 8 评论 -
Elasticsearch实践(二)在Springboot微服务中集成搜索服务
关于如何用Docker搭建Elasticsearch集群环境可以参考前一篇:Elasticsearch实践(一)用Docker搭建Elasticsearch集群。本文主要介绍,如果在Springboot体系中集成Elasticsearch服务。本文基于:Elasticsearch版本是2.2.4,Springboot版本是1.5.3.RELEASE,spring-data-elasticsearch原创 2017-11-23 14:32:57 · 36863 阅读 · 9 评论 -
基于Docker的微服务架构的企业级服务集群实践(一)——服务发现
前言基于Docker的容器技术是在15年的时候开始接触的。两年多的时间,作为一名Docker的DevOps,也见证了Docker的技术体系的快速发展。本文主要是结合在公司搭建的微服务架构的实践过程,做一个简单的总结。希望给在创业初期探索如何布局服务架构体系的DevOps,或者想初步了解企业级架构的同学们一些参考。(PS:本来想一口气写完,但发现一个模块就写了太久,后续会持续更新。原创 2018-05-31 09:52:48 · 6078 阅读 · 0 评论 -
基于Docker的微服务架构的企业级服务集群实践(二)——服务间通信
服务间的IPC机制按照微服务的架构体系,解决了服务发现的问题之后。就需要选择合适的服务间通信的机制。如果是在Springboot应用中,使用基于Http协议的REST API是一种同步的解决方案。而且Restful风格的API可以使每个微服务应用更加趋于资源化,服务化的松耦合思想靠近。 如果每个微服务是使用DDD的思想的话,那么需要每个微服务尽量不使用同步的RPC机制。异步的基于消息的方式比原创 2018-05-31 09:53:00 · 3223 阅读 · 0 评论 -
基于Docker的微服务架构的企业级服务集群实践(三)——API Gateway的使用
使用API Gateway处理微服务请求转发、合并前面两篇Docker微服务的服务发现以及Docker微服务的服务间通信机制。主要介绍了如何解决微服务的服务发现和通信问题。 在微服务的架构体系中,为了减少服务间的耦合,在划分服务间的限界上下文的时候。会尽量减少微服务之间的 调用。在实际的需求场景中,往往要同时请求多个微服务资源。 解耦微服务的调用如下面一个场景,”用户订原创 2018-05-31 09:53:16 · 4768 阅读 · 2 评论 -
基于Docker的微服务架构的企业级服务集群实践(四)—— 持续集成部署
微服务的持续集成部署前三篇主要介绍了微服务的服务发现、服务通信以及API Gateway。整体的微服务架构的模型初见。在实际的开发、测试以及生产环境中。使用Docker实现微服务,集群的网络环境会更加复杂。微服务架构本身就意味着需要对若干个容器服务进行治理,每个微服务都应可以独立部署、扩容、监控。本篇会继续探讨如何进行Docker微服务的持续集成部署。 镜像仓库用Docke原创 2018-05-31 09:53:28 · 4394 阅读 · 0 评论 -
基于Docker的微服务架构的企业级服务集群实践(五)—— 服务集群
服务集群的解决方案企业在实践使用Docker部署、运行微服务应用的时候,无论是一开始就布局微服务架构,或者从传统的单应用架构进行微服务化迁移。都需要能够处理更复杂的集群中的服务调度、编排、监控等问题。下面主要为大家介绍在服务集群下,如何更安全、高效得使用Docker,以及在架构设计上,需要考虑的方方面面。 负载均衡这里说的是集群中的负载均衡,如果是纯服务端API的原创 2018-05-31 09:53:39 · 2494 阅读 · 0 评论 -
领域驱动设计整理——实体和值对象设计
实体引言在领域驱动设计里,实体的设计可以说是通用语言的核心,也是最开始在模型划分中需要考虑的。怎么样设计实体和怎么样划分限界上下文同样重要。实体的概念就是要保证通用语言的完整性。领域驱动让设计实体的关注点从数据的属性和表的关联转化到了富有行为的领域概念上。 实体是具有可变性的,这是一个和值对象比较明显的区分,也即实体是可以持续得变化,持续得修改,并且具有唯一的标识。在设计实体的时候需要跳出CRUD的原创 2016-01-10 21:49:10 · 22509 阅读 · 0 评论