共计 12 篇文章

第05课:分布式微服务架构体系详解——服务发现和服务通信

前言 微服务架构的概念比容器技术早,但是却随着容器技术在 2013 年的兴起,基于容器技术的微服务架构越来越被广泛应用。容器的轻量级部署方式很适合为每个微服务提供基础运行环境。 本文会基于 Docker 容器,先介绍下服务发现的问题和可用的方案,然后对同步通信以及异步通信的技术做一些对比介绍,最后会结合 DDD(Domain-Driven Design)的思想来分析合理的通信模型。 Docker 容器的基础知识本文会略过,对 Docker 感兴趣的读者可以去看看 Docker 源码 ,Docker 是用 ...

第04课:微服务架构下的分布式场景及⽅案——数据分区

前言 对于大规模的分布式集群,或者对于数据密集型应用来说,为了提高吞吐量和性能以及可用性,一般会结合使用数据复制和数据分区。数据复制将对单库的请求压力分给更多的数据库实例,数据分区将每个实例中的庞大的数据文件以一定规则切分成更小的数据文件,并可以存储到不同的磁盘(或数据节点 Node)上,以提高请求的并发性能,同时,增加了扩展性。 本文将介绍分布式存储集群的高可用的另外一个解决方案——数据分区,以及以 MySQL 为示例看一些数据分区的具体实现。 理解数据分区 复制和分区的差别是什么?请看下面一张图: 分区和分表有什么差别 对于一些大规模数据集群的应用,经常能听到分库分表的解决方案。微服务的体系按照服务维度分库是必然( ...

第03课:微服务架构下的分布式场景及⽅案——数据复制

前言 一个高可用的分布式系统,底层的存储也是需要高性能、高可用的。上一篇介绍了一些数据存储产品,如果数据存储服务都是单库的,那么在唯一的单库发生故障时,将导致上层的微服务系统也都无法正常运行。为了加强可用性,我们需要更多的数据库节点,一个节点挂了,可以快速切换到可用的节点提供服务。有更多的节点提供服务可以带来很多好处,如高可用、高性能,基于地理分布的数据中心可以提升用户访问速度。 为了提供更好的性能和可用性,也需要解决一些复杂的问题,尤其是多 Node 的数据复制问题。第一篇文章中有介绍到网络延迟的问题,在多节点间进行数据复制必然会遇到网络延迟,也需要能处理节点上下线、一致性问题。本篇内容将介绍分布式存储系统数据复制的问题和解决方案, ...

第02课:微服务架构下的分布式场景及⽅案——数据存储

前言 微服务架构下,很适合用 DDD(Domain-Drive Design)思维来设计各个微服务,使用领域驱动设计的理念,工程师们的关注点需要从 CRUD 思维中跳出来,更多关注通用语言的设计、实体以及值对象的设计。至于数据仓库,会有更多样化的选择。分布式系统中数据存储服务是基础,微服务的领域拆分、领域建模可以让数据存储方案的选择更具灵活性。 不一定所有的微服务都需要有一个底层的关系型数据库作为实体对象实例的存储。以一个简单的电商系统为例:“用户微服务”和“商品微服务”都分别需要关系型数据库存储结构化的关联数据。但比如有一个“关联推荐微服务“ ...

第01课:微服务架构下的分布式场景及⽅案——分布式系统的问题

前言 无论是 SOA 或者微服务架构,都是必须要面对和解决一些分布式场景下的问题。如果只是单服务、做个简单的主备,那么编程则会成为一件简单幸福的事,只要没有 bug,一切都会按照你的预期进行。然而在分布式系统中,如果想当然的去按照单服务思想编程和架构,那可能会收获很多意想不到的“惊喜”:网络延迟导致的重复提交、数据不一致、部分节点挂掉但是任务处理了一半等。在分布式系统环境下编程和在单机器系统上写软件最大的差别就是,分布式环境下会有很多很“诡异”的方式出错,所以我们需要理解哪些是不能依靠的,以及如何处理分布式系统的各种问题。 理想和现实 微服务架构跟 ...