架构设计

52 篇文章

多研究些架构,少谈些框架(1) -- 论微服务架构的核心概念

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

微服务架构和SOA区别 微服务现在辣么火,业界流行的对比的却都是所谓的Monolithic单体应用,而大量的系统在十几年前都是已经是分布式系统了,那么微服务作为新的理念和原来的分布式系统,或者说SOA(面向服务架构)是什么区别呢? 我们先看相同点: - 需要Registry,实现动态的服务注册发现机制; - 需要考虑分布式下面的事务一致性,CAP原则下,两段式提交不能保证性能,事务补偿机制需要考虑...

阅读全文

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

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

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

阅读全文

多研究些架构,少谈些框架(4)-- 架构师是技术的使用者而不是信徒

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

我承认我是标题党, 为什么要写这篇充满争议的文章?目前架构师这个职位特别火热,程序员的目标都是成为一个令人尊敬的架构师。但是我们真的理解架构师应该做些什么?很多人把架构师和框架师等同起来,认为研究框架多的才是架构师 下面说的情况请勿对号入座。 - 盲目的追新: 技术人员的喜好往往是什么技术流行就追什么技术。现在的技术发展快,前后端不断涌现各种框架,我们恨不得把这些框架都用在自己的项目里才行,要不然...

阅读全文

多研究些架构,少谈些框架(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存储来实现分布式锁以及信号量的方法。 分布式锁实现...

阅读全文