微服务实践:全栈小团队“洪荒之力”改造阿里服务CRM技术体系

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 8月9日2016云栖大会北京峰会拉开帷幕,阿里高级技术专家肥侠带来了“智能客服:基于微服务的系统改造实践”的重要演讲。其中首先进行了业务介绍,接着和大家简单分享了微服务,着重和大家讲述了微服务的实践,包括微服务技术实践、微服务团队实践、DT下的微服务。精彩不容错过——
本文不重点介绍业务系统,更偏重于经验分享。首先进行了业务介绍,接着和大家简单分享了微服务,着重和大家讲述了微服务的实践,包括微服务技术实践、微服务团队实践、DT下的微服务。

以下为内容整理:


作为全球最大的电商平台,阿里巴巴面对的是逾4亿的活跃消费者、上千万的活跃商家、几千种阿里自有产品和业务,以及每天上千万笔的交易。从这些天然交易闭环里,有极其丰富的数据,如何用技术来实现用户的“One-Click”和“One-Stop”的服务体验?

通过微服务架构的应用,我们重构了原来臃肿低效的CRM系统,让每个服务小团队专注自己的业务快速迭代。同时,通过数据、模型、机器学习等智能技术手段构建全新的后台微服务,极大的扩展了我们平台的服务吞吐能力,即使在双十一的特殊场景下,利用非常有限的人力,也完美承接了当天上千万消费者的服务诉求和几亿消息的发送。

 

挑战

我们的业务变化非常快,从最初的简单的CRM,到现在要面对很多端很多业务,需求变化很快, 服务规模指数级增长,服务渠道需求多元化,服务内容随着业务进一步复杂,服务体验的标准不断提升,开发团队的压力也很大,对应的挑战就会很大。

我们希望做到“两个One”,OneStopOneClick,可以让不同的业务方和商家快速接入我们的系统,也可以让我们的“小二”快速的解决用户问题。

7d146c86caf697674c677a8cb01b260a5739d6b0

大概的业务背景会分成三个层次。包括用户进来提问会根据用户问题做智能路由,我们会有智能机器人以人机交互的方式去解决简单的问题,复杂问题则会根据场景智能分配给最合适的客服小二处理,同时会有一个后台的管理系统,包括快速接入、现场管理、绩效业绩。

一个孤立系统的总混乱度会不断增加。业务飞速发展让系统应接不暇,随之而来的噩梦也会越来越多,开发效率低、跟不上业务发展、稳定性差、代码维护难等等,我们希望用微服务的方式把这个系统做改造升级。

 

微服务化实践

设计系统的组织,最终产生的设计等同于组织之内、之间的沟通结构。

微服务架构要求

  • 分布式服务组成的系统
  • 强服务个体和弱通信总线去中心化治理(SOA
  • 去中心化数据依赖
  • 自动化运维(DevOps
  • 容错
  • 按照业务而不是技术来划分组织
  • 做有生命的产品而不是项目
  • 快速演化

我们是逐步演进的,最早是一个大而全的CRM,最初为ORM+MVC。随着业务发展的越来越快,我们开始用RPC,利用集团的分布式技术中间件快速解决了微服务技术上的挑战。RPC与接下来的MSA界限已经非常小了,更重要的团队的管理理念,按微服务化的理念来拆分团队和系统,让分工和开发效率更加高效。现在,我们不仅仅用Java和项目去做服务,我们用离线数据、机器学习来驱动我们的整个系统和业务的发展。我们通过Service的包装把后台的离线数据也暴露给系统去用,去开发所谓的智能的CRM

95569e9d847f27a5366c3e6efea707bed73c6cb7


微服务化技术实践

微服务的目的是有效的拆分应用,实现敏捷开发和部署。

基于React的插件化方案

f639e3d601232b408835ffa998ce7f5a5c0bfd5c

我们不仅把后台服务拆分,前端基于React把所有的模块分成一个个小App,这些小App可以自己去开发,只要按照前端的规范,开发之后可以嵌到我们的CRM当中,这样在前端就把所有的系统去解耦了。

服务发现

4cfdfd90f661b29b6ceee6de83b906e7a2742317

服务发现会分成两种模式。小型公司没有那么多服务和应用,一般通过LoadBalancer做服务治理,用户访问的应用和后台的服务都是透明的;大规模互联网公司一般则通过客户端做服务治理,所有的业务逻辑、服务治理在每个微服务后台都会有一个客户端去把自己的信息注册上去,前台服务在访问时就通过服务注册去寻找信息,如果后台服务挂了,它也会告诉服务注册,前台就会知道这个服务不可用。通过这种方式可以实现流控、负载均衡等。

服务间通信(IPC

b60a0eaa4eba9193ad2d32198ccdc896039a74a8

我们希望所有的服务能够内聚,服务之间是非常轻量级的,不要耦合在一起。通过这样的沟通方式有:

  • 同步异步调用(HTTP/RPC):RESTThriftDubbo
  • 异步消息(Notification/PubSub):RabitMQKafka MetaQNotify

保证可用性

  • 怀疑第三方:有兜底,制定好业务降级方案;遵循快速失败原则,一定要设置超时时间;适当保护第三方,慎重选择重试机制。
  • 防备使用方:设计一个好的apiRPCRestful),避免误用;流量控制,按服务分配流量,避免滥用。
  • 做好自己:单一职责原则;控制资源的使用;避免单点。

 

微服务虽然开发简单,技术栈灵活,服务独立无依赖,独立按需扩展,可用性高,但微服务是有维护成本的,数据的一致性、性能的监控、多服务运维、系统部署依赖等问题想要都解决掉是不容易的。处于不同阶段的技术团队,需要根据自己公司的技术积累和团队的技术水平做相应的选择。

 

微服务化团队实践

技术对于微服务来说从来都不是最重要的,大部分人很快就能实现设计微服务架构,理念上的转变和团队的管理上才是最大的挑战。 那么怎样去建设微服务团队呢?

 

微服务团队应该按照业务组织资源,建立全栈小团队。

  • 小而全团队(含UIDEVDATATEST)。
  • 通过接口明确业务边界,无耦合(KISS  or SRP)。
  • War Room自治团队,对自己的业务负责。
  • 做有生命的持续演进的产品或后台服务,不重要的项目关停并转。
  • 对业务有使命感,不是打杂工,技术驱动业务。
  • 不求完美,快速持续集成,弹性容错。

Behavior Driven Development

52f6ab9db98d23dcc2613395049c48bc636ee3c3

BDD从业务的维度,让PD、业务方、开发和测试能达成一致,知道要做的事情是什么,通过敏捷开发方式定义出来story,把整个复杂的PRD拆分成很小的容易理解的,然后测试人员和开发人员针对这些story去写业务用例,这个用例不仅能做持续集成,也能变成文档交接。

 

AI/IA as a Service

DT时代下的产品开发,基于经验积累的工程能力变的不那么重要,而基于大数据和机器学习沉淀的模型算法变成越来越重要。未来的微服务不仅仅是Java或者工程师开发出来的,而是越来越多的由机器从海量的数据当中学习出来,他们也是我们系统自治的提供微服务的重要组成。

7e3ed2c376a6474c32c70b3948f170542a6fd847

我们自己维护的专业的数据库、从客户那边积累下的数据库和网络上的非结构化的数据都拉下来去做对应的数据清洗和拟合,把这些离线数据封装出来的模型以Java服务(API)的方式暴露出来,变成我们应用的一部分。

阿里小蜜技术体系

b317a763e4763ab558ee80d8bf8c2aa414f005a9

图为阿里小蜜问答系统,我们把数据做一些自然语言的处理后,能够智能回答用户的一些简单问题,提供越来越真实和自然的人机交互。比如可以通过多轮交互的方式,更准确的理解用户语意和真实意图,再通过知识图谱的构建来帮助用户快速的找到准确的答案。

相关文章
|
3天前
|
设计模式 API 开发者
深入浅出微服务架构:从理论到实践
在软件开发领域,微服务架构已经成为一种流行的设计模式。它承诺能够带来更好的模块化、可扩展性和敏捷性。然而,将一个传统的单体应用拆分成多个微服务并非易事。本文旨在通过实际案例分析,帮助读者理解微服务的核心概念,以及如何在实际项目中实施微服务架构。我们将一起探讨微服务的设计原则、技术选型和面临的挑战,并分享一些成功实施的策略。
|
1天前
|
消息中间件 Java API
解密微服务架构:如何在Java中实现高效的服务通信
微服务架构作为一种现代软件开发模式,通过将应用拆分成多个独立的服务,提升了系统的灵活性和扩展性。然而,实现微服务之间的高效通信仍然是许多开发者面临的挑战。本文将探讨在Java环境中实现微服务架构时,如何使用不同的通信机制来优化服务之间的交互,包括同步和异步通信的方法,以及相关的最佳实践。
|
5天前
|
消息中间件 运维 监控
深入浅出微服务架构:从理论到实践
微服务架构,一种将复杂应用拆分成小型、独立服务的设计理念,近年来在软件开发领域大放异彩。它以灵活性、可维护性和可扩展性著称,但同时也带来了一系列挑战,如服务间通信、数据一致性和运维复杂性等。本文旨在通过浅显易懂的语言和实际案例,带领读者深入理解微服务架构的核心概念,掌握其设计原则,并了解如何在实际项目中有效运用。我们将从基础讲起,逐步深入,让初学者能够快速上手,同时为有经验的开发者提供一些高级技巧和最佳实践。
14 4
|
3天前
|
存储 缓存 Java
Eureka原理与实践:深入探索微服务架构的核心组件
在微服务架构日益盛行的今天,服务之间的注册与发现成为了保证系统高可用性和灵活性的关键。Eureka,作为Netflix开源的服务注册与发现框架,凭借其简单、健壮的特性,在微服务领域占据了举足轻重的地位。本文将深入剖析Eureka的原理,并通过实践案例展示其在实际项目中的应用,以期为开发者提供一个高端、深入的视角。
|
3天前
|
Kubernetes Nacos 微服务
【技术难题破解】Nacos v2.2.3 + K8s 微服务注册:强制删除 Pod 却不消失?!7步排查法+实战代码,手把手教你解决Nacos Pod僵死问题,让服务瞬间满血复活!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但有时会遇到“v2.2.3 k8s 微服务注册nacos强制删除 pod不消失”的问题。本文介绍此现象及其解决方法,帮助开发者确保服务稳定运行。首先需检查Pod状态与事件、配置文件及Nacos配置,确认无误后可调整Pod生命周期管理,并检查Kubernetes版本兼容性。若问题持续,考虑使用Finalizers、审查Nacos日志或借助Kubernetes诊断工具。必要时,可尝试手动强制删除Pod。通过系统排查,通常能有效解决此问题。
|
3天前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
16 0
|
4天前
|
设计模式 监控 Java
深入浅出:微服务架构的设计与实践
在软件开发领域,微服务架构已成为一种越来越流行的设计模式。本文将通过浅显易懂的语言介绍微服务的基本概念、设计原则和实践方法,帮助初学者快速理解并应用微服务架构。
|
4天前
|
Kubernetes Cloud Native Devops
云原生之旅:从容器化到微服务的实践之路
随着云计算时代的深入发展,传统的软件开发与部署模式已逐渐不能满足现代业务的需求。云原生技术以其灵活性、可扩展性和高效率成为新的发展方向。本文将通过浅显易懂的语言,带领读者一探云原生世界的大门,从容器化技术的起步,到微服务架构的构建,再到DevOps文化的融入,逐步揭示云原生技术如何助力企业快速迭代和高效运维。无论你是云原生领域的新手,还是希望深化理解的开发者,这篇文章都将为你提供有价值的信息和启示。
10 0
|
2天前
|
监控 负载均衡 API
从单体到微服务:架构转型之道
【8月更文挑战第17天】从单体架构到微服务架构的转型是一项复杂而系统的工程,需要综合考虑技术、团队、文化等多个方面的因素。通过合理的规划和实施策略,可以克服转型过程中的挑战,实现系统架构的升级和优化。微服务架构以其高度的模块化、可扩展性和灵活性,为业务的持续发展和创新提供了坚实的技术保障。
|
12天前
|
缓存 监控 API
【微服务战场上的神秘守门人】:揭秘API网关的超能力 —— 探索微服务架构中的终极守护者与它的神奇魔法!
【8月更文挑战第7天】随着微服务架构的流行,企业应用被拆分为围绕特定业务功能构建的小型服务。API网关作为微服务间的通信管理核心,对请求进行路由、认证、限流等处理,简化客户端集成并提升用户体验。以电商应用为例,通过Kong部署API网关,配置产品目录等服务的API及JWT认证插件,确保安全高效的数据交互。这种方式不仅增强了系统的可维护性和扩展性,还提供了额外的安全保障。
29 2