架构设计

共 60 篇文章

多研究些架构,少谈些框架(3)-- 微服务和事件驱动

2017-07-19 16:16 架构设计 微服务

接上篇,我们采用了领域驱动的开发方式,使用了充血模型,享受了他的好处,但是也不得不面对他带来的弊端。这个弊端在分布式的微服务架构下面又被放大。 事务一致性 事务一致性的问题在Monolithic下面不是大问题,在微服务下面却是很致命,我们回顾一下所谓的ACID原则 - Atomicity - 原子性,改变数据状态要么是一起完成,要么一起失败 - Consistency -...

阅读全文

多研究些架构,少谈些框架(2)-- 微服务和充血模型

2017-07-19 16:15 架构设计 微服务

上篇我们聊了微服务的DDD之间的关系,很多人还是觉得很虚幻,DDD那么复杂的理论,聚合根、值对象、事件溯源,到底我们该怎么入手呢? 实际上DDD和面向对象设计、设计模式等等理论有千丝万缕的联系,如果不熟悉OOA、OOD,DDD也是使用不好的。不过学习这些OO理论的时候,大家往往感觉到无用武之地,因为大部分的Java程序员开发生涯是从学习J2EE经典的分层理论开始的(Action、Service、D...

阅读全文

云原生应用的12要素

2017-07-06 16:41 架构设计 云原生 微服务

简介 如今,软件通常会作为一种服务来交付,它们被称为网络应用程序,或软件即服务(SaaS)。12-Factor 为构建如下的 SaaS 应用提供了方法论: - 使用标准化流程自动配置,从而使新的开发者花费最少的学习成本加入这个项目。 - 和操作系统之间尽可能的划清界限,在各个系统中提供最大的可移植性。 - 适合部署在现代的云计算平台,从而在服务器和系统管理方面节省资源。 -...

阅读全文

微服务(Microservices)翻译

2017-06-21 16:34 架构设计 微服务

> 原文是 Martin Flower 于 2014 年 3 月 25 日写的《Microservices》http://martinfowler.com/articles/microservices.html。 微服务 “微服务架构(Microservice Architecture)”一词在过去几年里广泛的传播,它用于描述一种设计应用程序的特别方式,作为一套独立可部署的服务。目前,这种架构方式...

阅读全文

微服务业务开发三个难题-拆分、事务、查询(下)

2017-05-19 16:36 架构设计 微服务

上集我们阐述了使用微服务体系架构的关键障碍是领域模型,事务和查询,这三个障碍似乎和功能拆分具有天然的对抗。只要功能拆分了,就涉及这三个难题。 然后我们向你展示了一种解决方案就是将每个服务的业务逻辑实现为一组DDD聚合。然后每个事务只能更新或创建一个单独的聚合。然后通过事件来维护聚合(和服务)之间的数据一致性。 在本集中,我们将会向你介绍使用事件的时候遇到了一个新的问题,就是怎么样通过原子方式更新聚...

阅读全文

微服务业务开发三个难题-拆分、事务、查询(上)

2017-05-17 16:36 架构设计 微服务

微服务架构变得越来越流行了。它是模块化的一种方法。它把一整块应用拆分成一个个服务。它让团队在开发大型复杂的应用时更快地交付出高质量的软件。团队成员们可以轻松地接受到新技术,因为他们可以使用最新且推荐的技术栈来实现各自的服务。微服务架构也通过让每个服务都被部署在最佳状态的硬件上而改善了应用的扩展性。 但微服务不是万能的。特别是在...

阅读全文

基于Consul的分布式信号量实现

本文将继续讨论基于Consul的分布式锁实现。信号量是我们在实现并发控制时会经常使用的手段,主要用来限制同时并发线程或进程的数量,比如:Zuul默认情况下就使用信号量来限制每个路由的并发数,以实现不同路由间的资源隔离。 > 信号量Semaphore,有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一...

阅读全文

基于Consul的分布式锁实现

我们在构建分布式系统的时候,经常需要控制对共享资源的互斥访问。这个时候我们就涉及到分布式锁(也称为全局锁)的实现,基于目前的各种工具,我们已经有了大量的实现方式,比如:基于Redis的实现、基于Zookeeper的实现。本文将介绍一种基于Consul 的Key/Value存储来实现分布式锁以及信号量的方法。 分布式锁实现...

阅读全文

Consul注销实例时候的问题

当我们在Spring Cloud应用中使用Consul来实现服务治理时,由于Consul不会自动将不可用的服务实例注销掉(deregister),这使得在实际使用过程中,可能因为一些操作失误、环境变更等原因让Consul中存在一些无效实例信息,而这些实例在Consul中会长期存在,并处于断开状态。它们虽然不会影响到正常的服务消费过程,但是它们会干扰我们的监控,所以我们可以实现一个清理接口,在确认故...

阅读全文

《微服务》九大特性重读笔记

2016-09-17 02:13 架构设计 微服务

今天重读了Martin Fowler的《Microservices》http://martinfowler.com/articles/microservices.html,在此记录一下对九大特性的理解。 服务组件化 组件,是一个可以独立更换和升级的单元。就像PC中的CPU、内存、显卡、硬盘一样,独立且可以更换升级而不影响其他单元。...

阅读全文