专栏首页图南科技系统服务化构建-定义服务化

系统服务化构建-定义服务化

关于服务化,以及软件系统的服务化,是一个大的概念。我通过写这些以服务化为主题的文章,总结出来服务化是一种思想,是一种软件过程,并没有严格的非此及彼的标准化定义.

话又说回来,软件开发是一项工程行为,按照软件开发的定义,是有一套理论基础作为支撑的,在大学教育里有专门的软件工程专业。

“服务化是有一定的量化指标可以参考的

本文试图在软件开发理论与中小型软件项目的最佳实践的基础之上,探寻最大程度的软件系统服务化。

“服务化系统首先应该是分布式的系统。

分布式系统

分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统有以下几个特征:

1 副本

副本(Replica)是分布式系统最常见的概念之一,指分布式系统对数据和服务提供的一种冗余方式。在常见的分布式系统中,为了对外提供高可用的服务,我们往往会对数据和服务进行副本处理。有副本的概念,就会关联到副本数据一致性问题。

2 故障总会发生

不要担心故障,故障在分布式系统中总会发生,我们要做的是预防故障,处理故障。

“分布式系统的核心就是处理各种各样的异常情况。

服务交互的三种状态

服务交互的三种状态,可以理解为网络请求的三种状态,“成功”、“失败”、“超时”,

尤其注意失败和超时是不一样的,失败代表着明确的处理结果,而超时是一种不确定的状态。

这三种状态的区分对于跨系统之间定义通讯协议时很重要。

超时与重试

分布式系统需要区别对待 RPC 的“成功”、“失败”、“超时”三种状态。当出现“超时”时,可以通过发起读取数据的操作以验证 RPC 是否成功(例如银行系统的做法)。

或者设计分布式协议时将执行步骤设计为可重试的,即具有所谓的“幂等性”。失败的操作在一定场景下可以重试至成功。

【有些执行步骤是可重试的,而有些是不能重试的。幂等性的重点是其任意多次执行所产生的影响均与一次执行的影响相同,在事务型设计中 保持幂等性是尤为重要的】

本文对幂等性不做过多介绍。

C/S 与 P2P

这里回顾下,网络通讯中两种通讯模式 C/S 模式和 P2P 模式,C/S 模式强调的是客户端发起和服务器端之间的角色定位,P2P 模式认为没有严格的客户端和服务端。

P2P 模式下,在一组服务化的系统中,每一个节点都是调用链中的一环,除了用户最前端和数据持久化的最末端,几乎每一个节点都在向上游获取服务,向下游提供服务。

显然分布式系统中,使用的通讯模式都是 P2P 模式。

基于以上内容的理解,本文对服务化做一个简单的定义

定义服务化

服务化是软件服务的一个过程,是不断更迭和完善的。有如下几个可量化的属性

“共享性

1 服务化的系统最终功能交付物被多个下游系统依赖调用,调用方>=2。也就是一个服务是可以被多个服务消费方共享使用的。服务需要独立部署,不需要与其他项目深度耦合。

“有功能边界

2 服务化的系统具有一定的抽象功能,抓大放小,解决系统核心功能及主要矛盾。我们需要定义系统的核心模块及数量,也就是服务化的粒度

“稳定性

3 服务化的系统要稳定,可靠,可控

“健壮性

4 服务化的系统具有一定的健壮性,弹性。对于异常可以进行平行过度,拥有降级等容错机制。

弹性思维

弹性是服务化系统的一个特点,要求系统在遇到异常和外部破外时,能够保持原有最小化的功能输出,不至于被压倒。设计者在设计服务系统时,需要建立弹性思维。

弹性思维

容错降级

容错理念.png

总结

本文从分布式的特点,服务交互状态,以及网络通讯模型几部分着手,基于理论,实践,可复制性,复盘开发经验和理解的原则,对软件服务化进行了 4 个纬度的定义。之后我会梳理一些开发案例进行分解。

参考资料

[1]

内部分享:阿里巴巴 B2B 高效研发管理实践: https://www.jianshu.com/p/766af9b5a1dd

本文分享自微信公众号 - 图南科技(tunan_technology),作者:图南科技

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 系统服务化构建-分布式基本特征

    本文给出了分布式系统的初步概念模型,通过介绍分布式消息队列的几种分类以及Redis的分布式高可用哨兵模型,进而引出分布式系统的几个特征,副本,故障总会发生,消息...

    needrunning
  • 成长系列第一篇-技术人员的去技术化和多元化

    技术人员到了一定阶段总会考虑一个问题,当有一天我不做技术了,或者说不能做技术了,我能做什么?

    needrunning
  • VsCode 扩展巡礼-REST Client

    RestClient是VsCode商店的有个http访问扩展,官方地址 RestClient,用于模拟Http请求。

    needrunning
  • [TCP/IP] 网络层-简单查看路由表

    使用抓包工具排除网络故障: 1.如果一台计算机在网络上发广播包,广播的mac地址是全ff,就有可能堵塞 2.使用抓包工具,检测广播包和多播包

    陶士涵
  • Electron 应用的流水线设计

    Electron 是由 Github 开发,用 HTML,CSS 和 JavaScript 来构建跨平台桌面应用程序的一个开源库。

    LinuxSuRen
  • Kaggle | 女士电子商务服装数据分析

    原文:https://maoli.blog.csdn.net/article/details/104461970

    润森
  • Java漫谈-协变返回类型

    Java SE5中添加协变返回类型,表示在导出类中的被覆盖方法可以返回基类方法的返回类型的某种导出类型。

    汐楓
  • 系统学习Windows客户端开发

    gaigai
  • 在Express中对MongoDB数据库进行增删改查

    这两天跟着B站的Johnny老师学习NodeJs+Express+MongoDB相关的知识点,前后跟着做了1小时搞定NodeJs(Express)的用户注册、登...

    ccf19881030
  • Jmeter系列(13)- 取样器Samplers 的入门介绍

    https://www.cnblogs.com/poloyy/category/1746599.html

    小菠萝测试笔记

扫码关注云+社区

领取腾讯云代金券