[Introduction to Zeroc ICE of RPC Framework]

1. Introduction to Zeroc ICE

Zeroc ICE ( Internet Communications Engine ) middleware is known as a unified standard, open source, cross-platform, cross-language, distributed, secure, service transparent, load balancing, object-oriented, superior performance, firewall penetration, and communication shielding. Therefore, compared with the middleware technologies such as Corba, DCOM, SOAP, J2EE, etc., it naturally integrates many advantages, but does not have their shortcomings.

 

Ice is a comprehensive RPC framework with support for C++, C#, Java, JavaScript, Python, and more.



 

ZeroC ICE refers to ZeroC's ICE (Internet Communications Engine) middleware platform.

 

The current ICE platform includes Ice, Ice-E, and Ice Touch.

 

Ice is designed for major platforms, including Windows and Linux, and supports a wide range of languages, including C++, Java, C# (and other .Net languages ​​such as Visual Basic), Python, Ruby, PHP, and ActionScript. Also includes all ICE services such as Ice Grid, IceStorm, etc.

 

Ice-E is an implementation of Ice on resource-constrained platforms, supporting C++ and embedded operating systems such as Windows CE, Linux. Ice-E itself does not contain any services, but it is possible to take advantage of the various services offered on Ice. Therefore, with Ice-E, mobile devices can also be seamlessly integrated into distributed systems.

 

Ice Touch is a version developed for iPhone and iPod touch, including Object-C mapping, support for iPhone OS, and provides access to the full Cocoa framework for developing GUI applications for MAC OS X.

 

ICE can ensure that in any network environment or operating system, there is only one successful call. It will try its best to locate the remote server when it is running. If the connection fails, it will make repeated attempts to connect. The situation will prompt the user.

 

The network protocols used by ICE include TCP, UDP, and SSL. Unlike WebService, ICE has several options for calling modes, and each option is based on the characteristics of different network protocols. 

 

ICE Features 

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 communication principle:



 

2. Advantages of Microservice Architecture

innately distributed

Stateless (as far as possible)

building blocks

 

3. Monolithic application

通俗地讲,“单体应用(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

-->无视人为因素

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326870919&siteId=291194637