一、Zeroc ICE 介绍
Zeroc ICE ( Internet Communications Engine )中间件号称标准统一,开源,跨平台,跨语言,分布式,安全,服务透明,负载均衡,面向对象,性能优越,防火墙穿透,通讯屏蔽。因此相比Corba,DCOM,SOAP,J2EE等的中间件技术,自然是集众多优点于一身,而却没有他们的缺点。
Ice is a comprehensive RPC framework with support for C++, C#, Java, JavaScript, Python, and more.
ZeroC ICE 是指ZeroC公司的ICE(Internet Communications Engine)中间件平台。
目前ICE平台中包括Ice,Ice-E,Ice Touch。
Ice为主流平台设计,包括Windows和Linux,支持广泛的语言,包括C++,Java,C#(和其他.Net的语言,例如Visual Basic),Python,Ruby,PHP和ActionScript。也包括所有的ICE服务,例如Ice Grid,IceStorm等。
Ice-E是Ice在资源受限的平台上的一个实现,支持C++和嵌入式操作系统,例如Windows CE,Linux。Ice-E本身不包含任何服务,但是可以利用在Ice上提供的各种服务。因此,通过Ice-E,移动设备也能无缝的集成到分布式系统中。
Ice Touch是为iphone和ipod touch开发的版本,包括Object-C映射,支持Iphone OS,并为MAC OS X开发图形界面应用程序提供完整的Cocoa框架的访问。
ICE可以保证在任何的网络环境或者操作系统下,成功的调用只有一次,它在运行时会尽力的定位到远程服务器,在连接失败的情况下会做尝试性重复性连接,确实连不上的情况会给用户以提示。
ICE采用的网络协议有TCP、UDP以及SSL三 种,不同于WebService,ICE在调用模式上有好几种选择方案,并且每种方案正对不同的网络协议的特性做了相应的选择。
ICE特点
Flexible
Make synchronous and asynchronous invocations using TCP, UDP, SSL/TLS, and WebSockets. Bidirectional connections allow a server to reuse a connection established by a client to make callbacks.
Secure
Ice offers powerful and easy to use security features. The IceSSL plug-in uses your operating system's SSL/TLS stack to encrypt your data and authenticate your connections.
Fast
Ice uses a compact, efficient binary protocol to minimize CPU and bandwidth consumption.
Everywhere
Develop in C++, C#, Java, JavaScript, Objective-C, PHP, Python, and Ruby. Deploy on Linux, macOS, Windows, Android, and iOS.
ICE通信原理:
二、微服务架构的优点
先天分布式
无状态(尽量)
积木式发展
三、单体应用
通俗地讲,“单体应用(monolith application)”就是将应用程序的所有功能都打包成一个独立的单元,即主要业务逻辑都运行在一个进程里的程序,可以是JAR、WAR、EAR或其它归档格式。单体应用有如下优点:
为人所熟知 :现有的大部分工具、应用服务器、框架和脚本都是这种应用程序;
IDE 友好 :像NetBeans、Eclipse、IntelliJ这些开发环境都是针对开发、部署、调试这样的单个应用而设计的;
便于共享 :单个归档文件包含所有功能,便于在团队之间以及不同的部署阶段之间共享;
易于测试 :单体应用一旦部署,所有的服务或特性就都可以使用了,这简化了测试过程,因为没有额外的依赖,每项测试都可以在部署完成后立刻开始;
容易部署 :只需将单个归档文件复制到单个目录下。
相当于把所有鸡蛋放在一个篮子里面。
单体应用的一些不足:
不够灵活 :对应用程序做任何细微的修改都需要将整个应用程序重新构建、重新部署。开发人员需要等到整个应用程序部署完成后才能看到变化。如果多个开发人员共同开发一个应用程序,那么还要等待其他开发人员完成了各自的开发。这降低了团队的灵活性和功能交付频率;
妨碍持续交付 :单体应用可能会比较大,构建和部署时间也相应地比较长,不利于频繁部署,阻碍持续交付。在移动应用开发中,这个问题会显得尤为严重;
受技术栈限制 :对于这类应用,技术是在开发之前经过慎重评估后选定的,每个团队成员都必须使用相同的开发语言、持久化存储及消息系统,而且要使用类似的工具,无法根据具体的场景做出其它选择;
技术债务 :“不坏不修(Not broken,don’t fix)”,这在软件开发中非常常见,单体应用尤其如此。系统设计或写好的代码难以修改,因为应用程序的其它部分可能会以意料之外的方式使用它。随着时间推移、人员更迭,这必然会增加应用程序的技术债务。
四、单体应用的七宗罪
1. Building the wrong thing -->构建错误的东西
2. Failing to adopt a contract-first design approach
-->不实施契约优先(contract-first)
不实施契约优先(contract-first)设计方法是项目误入歧途的另一种途径。
一个好的服务契约允许开发者专注于微服务是在做什么,而不是专注于它是如何实现的,确定总体目标才是重中之重。
3. Assuming the wrong communication protocols
-->假设错误的通信协议
4. Introducing a shared domain model
-->引入共享域模型
5. Defining inappropriate service boundaries
-->定义不恰当的服务边界
6. Neglecting DevOps and Testing Concerns
-->疏忽DevOps 和Testing 关系
DevOps 就是开发(Development) 和运维(Operations)这两个领域的合并
7. Disregarding the Human Factor
-->无视人为因素