应用程序的通信成本

应用程序的通信成本

什么是通信

一个程序中两个以上功能相互传递信号或数据叫做通信。

什么是成本

这是是指时间成本与空间成本。 时间就是传递数据所花费的时间。空间是指传递过程耗费容量大小。

都有哪些通信方式

  1. 全局变量
  2. 线程间通信
  3. 共享内存
  4. 共享文件
  5. 管道
  6. Socket
  7. 硬件(串口,USB) 等等

全局变量

全局变量是成本最低通信方法,通过设置全局变量,在程序运行时过程中均可操作该变量,用户信号传递,数据传输。

线程间通信

线程间通信也是采用全局变量方式,通常线程库会提供一套完善的API供用户使用,它可以实现共享,锁,互斥等机制。

共享内存

共享内存是在内存中申请开辟一个区域,用于数据共享存储。

共享文件

将数据存储在文件中,供多线程,多进程访问,文件可以上锁与解锁,这种方式性能最差,但对于初级开发者非常适合。 通过将文件存储在tmpfs或shm 文件系统中,可以获得不错的性能。

管道

管道是字符设备,通常是fifo(先进先出)单向通信,如果需要双工可能使用两个管道。

Socket

Socket分为 unix socket 与 tcp/udp socket. 前者只能在unix like 系统中使用。 Socket 分为阻塞与非阻塞通信。 其中tcp/udp Socket 可以跨服务器传输数据。

硬件

例如串口通信,使用串口连接两台电脑,通常速率为 9600bps,115200bps A电脑中运行

cat /dev/ttyS0

B电脑运行

cat /etc/passwd > /dev/ttyS0

可以将/etc/passwd文件从A电脑传递到B电脑。

不再本文讨论范围,这里不多述。

现在我们已经清楚了各种通信方式,这些通信方式适用于不同场景,由此出现了很多种使用方式,甚至多种方式同时使用。

服务器池概念

互联网时代的特点是,服务器不在单一一种,而是各种异构系统,我们经常会看到一个网站有多个服务器组成,因此我们将应用分布在不同的服务器上运行。 例如 Web服务器,应用服务器,缓存服务器,数据库服务器各司其职。就应用服务器还可能分成很多种类,例如搜索,内容管理,用户中心,等等。 问题来了,你会发现你的每个团队开发出一个产品,都需要一个服务器运行,每个团队都在做独立系统。不同团队开发出的功能与其他产品并不兼容,于是有了接口这种东西。 运维的问题也来了,每个应用一个服务器不太现实,但每个项目都不想与其他项目公用一个服务器资源,于是有了虚拟机。

于是我们见到的系统是这样了

               +--------+
               | C 应用 |
               +--------+
                ^  ^  ^
                |  |  |
+--------+ <-----+  |  +-----> +--------+
| A 应用 | <--------+--------> | B 应用 |
+--------+ <-----+  |  +-----> +--------+
                 |  |  |
                 V  V  V
               +--------+
               | D 应用 |
               +--------+

A 应用 运行中会与其他三个服务器产生通信,一次操作建立三次连接,这样的通信成本是非常高的,如果任何一个节点出现故障都出现阻塞。 从运维角度这种配置也极其繁琐,每个节点都要配置与其他连点连接,防火墙ACL 维护也非常繁琐。 出现故障,排查也非常困难,还会消耗大量的排查时间。

进一步优化

我们将公共调用部门放在一处,然后将所有资源都放在服务器上。通过负载均衡分发调用,高可用技术解决公用接口单点问题。

               +----------+
               | 公共接口 |
               +----------+
                 ^  ^  ^
                 |  |  | 
    +------------+  |  +------------+
    |               |               |
    V           V               V
+--------+      +--------+      +--------+
| A 应用 |      | B 应用 |      | C 应用 |
| B 应用 |      | C 应用 |      | A 应用 |
| C 应用 |      | A 应用 |      | B 应用 |
+--------+      +--------+      +--------+

这样的好处显而易见,服务器节点充分使用,既有高可用,又有负载均衡,保障7*24小时无故障运行。部属也方便。 注意上面:每个节点的 A,B,C 应用 加权值不同。

耦合与解耦

耦合级别有变量级别、函数级别、方法级别、类级别、包级别、协议级别、语言级别、数据流级别、缓存级别、数据库级别、以及业务级别。 你需要根据当时场景适当耦合或解耦。例如理论上软件运行速度是在同一个实体机上运行效率最高,有时可能将其设计为分布式才能体现效率。

原文发布于微信公众号 - Netkiller(netkiller-ebook)

原文发表时间:2015-10-12

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java进阶架构师

【架构技术专题】

随着网站业务的发展,一台服务器逐渐不能满足需求;这时候就需要将应用和数据分离,如图。

583
来自专栏SDNLAB

数据中心网络架构—VL2

一、背景 随着网络技术的发展,数据中心已经成为提供IT网络服务、分布式并行计算等的基础架构。数据中心应用范围愈加广泛,应用需求不断增加,业务数据量达T/P级以上...

3354
来自专栏腾讯云数据库团队的专栏

腾讯云 TDSQL 审计原理揭秘

在云服务时代,打造一款同时具备了开源数据库的性价比和商业数据库的安全性的数据库,几乎是所有使用者心中的梦想。腾讯云数据库 TDSQL 基于这样的考虑,实现了云化...

9290
来自专栏即时通讯技术

腾讯资深架构师干货总结:一文读懂大型分布式系统设计的方方面面

我们常常会听说,某个互联网应用的服务器端系统多么牛逼,比如QQ、微信、淘宝。那么,一个大型互联网应用的服务器端系统,到底牛逼在什么地方?为什么海量的用户访问,会...

652
来自专栏Java架构师学习

深度学习Dubbo系列(入门开篇)一、背景二、架构三、需求四、用法五、快速启动

983
来自专栏腾讯Bugly的专栏

TRIM:提升磁盘性能,缓解Android卡顿

在业内,Android 手机一直有着“越用越慢”的口碑。根据第三方的调研数据显示,有77%的 Android 手机用户承认自己曾遭遇过手机变慢的影响。他们不明白...

4069
来自专栏Netkiller

应用程序的通信成本

应用程序的通信成本 什么是通信 一个程序中两个以上功能相互传递信号或数据叫做通信。 什么是成本 这是是指时间成本与空间成本。 时间就是传递数据所花费的时间。空间...

2755
来自专栏ITCloud的专栏

PGXZ 的架构揭秘

本文将重点介绍 PGXZ,作为 TStack 平台重要的数据库产品能力,用户可在云端轻松设置、操作,且无需负责基础运维工作,以及为灾难恢复而进行的数据备份。

8782
来自专栏CSDN技术头条

日处理20亿数据,实时用户行为服务系统架构实践

携程实时用户行为服务作为基础服务,目前普遍应用在多个场景中,比如猜你喜欢(携程的推荐系统)、动态广告、用户画像、浏览历史等等。 以猜你喜欢为例,猜你喜欢为应用内...

22710
来自专栏数据和云

实战课堂:一则CPU 100%的故障分析处理知识和警示

编辑手记:在现实的生产环境中,DBA可能遭遇到各种各样的异常,或简单、或复杂,但是无一不考验DBA的经验和能力,在『实战课堂』栏目中,我们将整理和分享来自云和恩...

993

扫描关注云+社区