微服务模式:Saga

背景

你已经应用了一个服务一个数据库的模式,每个服务都有自己的数据库。但是一些事务需要跨服务,因此你需要一种机制来保证跨服务的数据一致性。假设你正在建设一个电子商城,客户有其信用额度。应用必须确保新订单不会超过该客户的可用额度限制。因为订单和客户信息在不同的数据库中,因此应用不能简单的使用ACID事务。

- 阅读剩余部分 -

标签: CQRS, Event Sourcing, 微服务

CQRS/ES架构下如何保证用户名的唯一性?

CQRS/ES下,许多开发者不了解如何在系统中处理这样的场景:

在用户创建的时候,我们想要去验证用户名在数据库中是否是唯一的。我应该使用Event Store还是使用读数据库查询?我该在哪执行这个查询?

这个问题是StackOverflow上与CQRS话题有关的最受关注的话题。因此在这篇文章中,我们将尝试针对这个问题寻找出最佳解决方案。

- 阅读剩余部分 -

标签: ddd, CQRS, Event Sourcing, Event Store

编程中的hydration是什么意思

经常能看到在一些书本和文章中写到hydration,这一单词单独去翻译为“水合”、“水合作用”等,但放在文章中又似乎读不同,难以理解。

通过查阅了更多的信息之后,hydration的大致意思基本了解了。

可以理解为对象提供水分,为什么对象呢?就是刚实例化的对象。并且我们最常见提到“水合”的地方就是刚从数据库或其他存储介质中取出数据填充到对象上。

那么这种一个已经在内存中实例化的对象,还没有包含任何数据,然后用数据(例如从数据库、网络、文件系统等获取的)填充到该对象内,这种行为成为hydration水合。

常见的一种水合方式就是序列化和反序列化了,如在PHP中对对象进行serializeunserialize,此时的反序列化==实例化+水合

标签: none

单表继承(Single Table Inheritance)

将类的继承层次表示为单张数据表,这张表内含有每个类的所有字段

classInheritanceTableSketch.gif

关系数据库不支持继承,当对象映射到数据库时,我们必须考虑如何在关系数据表中良好的展示我们的对象继承结构。当对象映射到关系数据库时,在多张表中处理继承结构过程中,我们尝试着去尽量减少迅速增加的join查询。(参考类表查询)。单表继承将所有类的继承结构的所有字段映射到了一张表中。

标签: none

类表继承(Class Table Inheritance)

表示类的继承层次结构,每个类都对应一张数据表
classInheritanceTableSketch.gif

对象关系阻抗不匹配的一个显著方面是由于关系数据库不支持继承。你想要数据库结构能够清晰的映射到对象,并想要在继承结构中可以任意链接。类表继承通过使用一个数据表对应一个类的方式来实现这样的目的。

标签: none

[译]架构风格 - 《Domain-Driven Design in PHP》第2章

本篇博文由本博客(http://www.veitor.net)经原文翻译,转载请注明出处。

为了能够构建一个复杂的应用程序,其中一个关键点就是需要有一个适合该程序的架构设计。领域驱动设计的一个优势就是它不受任何架构风格的约束。相反,我们可以自由的去为核心领域内的每一个限界上下文选择最合适的架构,为每一个领域问题提供多种架构选择。

- 阅读剩余部分 -

标签: ddd, 领域驱动设计

[译]开始使用领域驱动设计 - 《Domain-Driven Design in PHP》第1章

本篇博文由本博客(http://www.veitor.net)经原文翻译,转载请注明出处。

有什么大惊小怪的呢?如果你已经阅读了Vaughn Vernon和Eric Evans关于这个话题的书籍,那么你可能对我们即将要谈论的会很熟悉,因为我们大量借鉴了他们书中的定义和解释。 领域驱动设计(DDD)是帮助我们成功理解和构建软件模型设计的一种方法。 它为我们提供了策略(strategic)和战术(tactical)建模工具,以帮助设计符合我们业务目标的高质量软件。

- 阅读剩余部分 -

标签: PHP, ddd, 领域驱动设计

记一次Safari中无法跨域设置cookie的坑

问题重现步骤:
有两个不同域名的页面a.com/a.php和b.com/a.php两个域名,其中b.com/a.php会在其b.com下设置cookie,a.com/a.php页面中通过iframescript src等方式嵌入b.com/a.php页面。保持b.com下的cookie为空,正常chrome等浏览器访问a.com/a.php时,嵌入的b.com/a.php可以正常对b.com域名下设置cookie,而safari中设置不了。

一开始以为是自己在b.com页面中设置cookie方式有问题,对cookie的name、value、expire、path、secure、httponly等都检查了好多次都没找出原因。并且当时会出现偶尔可以设置偶尔不可以设置的现象,后来逐一条件排查下来是要在b.com域名下cookie清空的条件下会产生这问题,如果b.com下有任意的一个或多个cookie项,那么safari就能正常写进去。

我主要是在iphone上进行的测试,后经查也有人反馈在pc上的safari也有这问题,那最后基本可以定位这问题的原因了。
试过通过在b.com下设置各种cors header头,加各种P3P header均没有效果。
这估计还是因为safari的cookie策略导致的。。最后。。只能根据问题现象,使用很屎的中转办法了,提前在b.com下设置任意一个cookie来确保该域名下至少有cookie,后续才能设置成功。

查找过的相关文章:
https://blog.csdn.net/zhx19920405/article/details/51417250
https://stackoverflow.com/questions/32713992/safari-does-not-allowed-cross-domain-cookies-in-iframe

标签: iphone, safari

设计模式笔记:第二个设计模式原则——优先选择组合而非继承

QQ截图20151223224240.jpg

有些OOP程序员认为对象重用、扩展就等同于使用继承。一个类可以有大量属性和方法,通过继承这个类,我们增加新属性和方法,就能轻松的进行扩展,因为无需再重新编写代码。不过最后对于紧密绑定的对象,一味的使用继承方式来扩展会导致这么一个问题,那就是过度继承

- 阅读剩余部分 -

标签: PHP, 设计模式