http://www.cnblogs.com/wyx-xyz/p/7290902.html
软件工程的本质性与附属性工作
所有的软件创作都包括本质性和附属性工作:前者是创造由软件实体组成的复杂概念模型;后者是用程序语言表达软件实体,并在时间和空间的限制下翻译成机器语言。本质性工作存在四大难题:复杂性、隐匿性、配合性和易变性。
软件工程本质性工作的四大难题
1.复杂性
随着“软件吞噬世界”不断深入,软件对应的社会活动也越来越复杂。所实现业务的复杂,代表着软件系统的成功,同时意味更容易失败。
微服务提出以业务边界作为划分依据,将大系统拆分为由多个微服务构成的系统组,以降低单个系统的复杂性 ,同时增加了整个系统组的总体附属性问题。
2.隐匿性
未完成的软件在所有参与软件工程的人眼中都有盲区,盲人摸象造成了极大的沟通障碍。
微服务强调业务独立,缩短单个业务从需求到交付的开发周期。虽然没有降低系统的隐匿性,但是通过减少隐匿时间,以降低软件工程的总体隐匿性。快速交付要求团队具备持续交付和持续部署的能力,也模糊了需求、设计、开发、测试、验收、运维、运营等环节,造成了一定的生产力损耗。
3.配合性
软件开发到一定规模后,协同成本成为新增或修改业务的主要障碍,维持较高生产效率的一个思路是将系统控制在一定规模内。
微服务架构将单个系统内部的配合性问题转移到了各系统之间,由于系统间配合性问题通常更加复杂,所以微服务的划分变得非常重要。划分的原则是减少对外配合,将复杂的配合性问题留在单个系统内部。
4.易变性
软件所应用的环境由各各种易变的因素组成,单体架构对需求和性能的变化难以做出及时响应。
微服务业务独立,由负责本功能的团队直接面向用户需求,有利于想法在短时间内快速交流,加快响应速度。要求小团队拥有独立决策权,对传统IT公司的组织结构是一种挑战。同时微服务的交付模式也会挑战客户接受软件更新的习惯。
总结:微服务的价值
解放小团队的生产力,快速响应用户需求。