如果您不住在洞穴里,您可能会知道微服务是当今的体系结构。 随着这种趋势的发展,Segment产品在早期就
被接受为在某些情况下效果很好
的最佳实践 ,并且您很快就会看到,在某些情况下效果不佳。
简而言之,微服务是一种面向服务的软件体系结构,其中通过结合许多单任务,最少的网络服务来构建服务器端应用程序。 好处包括改进的模块性,简化的测试,更好的功能组成,环境的隔离以及开发团队的自治。 相反的是单片架构,其中大量功能位于一项服务中,其中测试,部署和扩展是整体进行的。
2017年初,我们的
细分市场产品大部分达到了临界点。 看起来我们就像是从微服务树上掉下来了,跌倒了。 一个小团队没有发展得更快,而是陷入了日益复杂的困境。 这种架构的显着优势已成为负担。 随着我们速度的降低,缺陷的数量也在增加。
结果,该团队无法让三名全职工程师获得成功,他们花了大部分时间只是在维护系统。 某些事情不得不改变。 这篇文章是关于我们如何退后一步并采用与我们的需求和团队需求非常吻合的方法的故事。
微服务为何有效
Segment客户端数据基础结构每秒接收数十万个事件,并将它们重定向到合作伙伴API(我们称为服务器端目标)。 这些领域有一百多种类型,例如Google Analytics(分析),Optimizely或自定义Web挂钩。
几年前,当产品最初发布时,其架构很简单。 有一个API可以接收事件并将其发送到分布式消息队列。 在这种情况下,该事件是由Web或移动应用程序生成的JSON对象,其中包含有关用户及其行为的信息。 示例有效负载如下所示:
{
"type": "identify",
"traits": {
"name": "Alex Noonan",
"email": "anoonan@segment.com",
"company": "Segment",
"title": "Software Engineer"
},
"userId": "97980cfea0067"
}
, , . API , , , – Segment API, , . Segment .
, . , . , , , . , HTTP 500, -. , , , , . , .

, , , ,
. , , ,
.
, X -. , , X, . , , . , X . , .

, . -, . , , , . , , , .

API , . – X
traits.dob
, API
traits.birthday
. X :
const traits = {}
traits.dob = segmentEvent.birthday
Segment, . , API . , , XML .
, , . , , . , . . , .
. .
50 50 . , , HTTP , .
, ,
event.name()
.
name
Name
. ,
firstName
,
first_name
,
FirstName
. , .
Identify.prototype.name = function() {
var name = this.proxy('traits.name');
if (typeof name === 'string') {
return trim(name)
}
var firstName = this.firstName();
var lastName = this.lastName();
if (firstName && lastName) {
return trim(firstName + ' ' + lastName)
}
}
. .
. . . , , . .
, . , . . , , .
, . , – . , .
, , - , .
, , , . , . .
140 . . , .
, . , , .
Centrifuge. Centrifuge .

, , , . , .
120 . . , .
, . , . .
, . , .
, . HTTP , , , .
, . , . , HTTP , . , . . , , .
HTTP . , . 5 . 140 .
Traffic Recorder. Traffic Recorder
yakbak, . , , . . , . , HTTP , .
, , Traffic Recorder. , 140+ . .
., . , . 140+ . .
. 2016, , 32 . 46. 6 , 2016 .
. , . , , .
, :
- . , , , . , . , , .
- . , , , . 3000+ , . - Redis , . , .
, . , . , . , .
, . , , , .
- . , , . , , .
- , , , . , .
. , , . .