Messaging1(一)|学习笔记

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
云防火墙,500元 1000GB
简介: 快速学习 Messaging1(一)

开发者学堂课程【高校精品课-上海交通大学-企业级应用体系架构:Messaging1】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/75/detail/15828


Messaging1(一)

 

内容介绍:

一、回顾上节内容

二、参考文件

三、异步通信

四、JMS

五、编程类型

 

一、回顾上节内容

问题:cloud 与sever之间的hash算法是如何做到一致的?Hash 可以明确告诉是什么,两端只要使用相同的算法即可。Hash 算法本身并不保密,本来目的就是想告诉大家使用的 hash 算法是什么,只有使用的相同,才能够知道输入的内容生成的密钥能否相同。所以该算法本身不保密,可以告诉大家。此外,cloud 与 server 没有用到 user 概念,即 cloud 概念实际为一个程序,user 是一个人的概念,知道 server 使用什么 hash 算法,在用户端获取真正的输入去做真正的处理。所以程序在执行哈希算法,是这样的逻辑。

继续回顾上节讲解的属性:

关于安全性,此处举例较直观:

Tactics for achieving security can be divided into

- those concerned with resisting attacks,

- those concerned with detecting attacks,

- and those concerned with recovering from attacks.

Using a familiar analogy,

- putting a lock on your door is a form of resisting an attack,  //在家中做安全性:在门上加一把锁,对应上述抵御攻击 resisting attacks,不允许进入

- having a motion sensor inside of your house is a form of detecting an attack,detecting attacks

//如果有人进入需要知道,所以探测攻击,在门或者窗户上安装运动传感器,对应探测攻击

- and having insurance is a form of recovering from an attack. //如果进入防止做坏事,所以需要从攻击中恢复,买财产保险,万一丢失可以赔付,对应 recovering from attacks

所以总体来讲,提高安全性有以上三方面措施。

三方面措施具体如下:

- Authenticate users.   对于用户做认证,引用公钥私钥作认证,使用私钥加密,公钥解开,便于让他人知道是谁

- Authorize users.   //进行授权,使用 permission 或 policy,policy 中做定义,permission 集合作认证,都是在授权,查看是否有相同权限操作

-Maintain data confidentiality.  //数据保密

· Encryption   //加密最重要

·Communication links  //链路上

- virtual private network (VPN)  //使用 VPN 加密

- Secure Sockets Layer (SSL)  //使用安全套接字协议加密

-Maintain integrity.   //完整性

·checksums  //校验和

·hash results  //散列值(数据一旦发生变化,散列到不同地方,类似如果密码不一样,得不到相同散列值,就无法知道内容)

- Limit exposure  //系统在定义接口时是 public 还是 protected,尽量少暴露

- Limit access  //访问上可以加控制

· Firewalls   //防火墙,不需要端口关掉

以上方式可以采取一些策略来抵御攻击。那么如何发现攻击呢,需要入侵检测的系统。该系统会检测网络的流量,做一些记录,然后分析是否存在问题,问题比较复杂,一般下载入侵检测的软件直接安装即可。实际上会分析通信的数据包做一些过滤。

The detection of an attack is usually through an intrusion detection system.

-Such systems work by comparing network traffic patterns to a database.

- In the case of misuse detection, the traffic pattern is compared to historic patterns of known attacks.

- In the case of anomaly detection, the traffic pattern is compared to a historical baseline of itself.

- Frequently, the packets must be filtered in order to make compariso

- Filtering can be on the basis of protocol, TCP flags, payload sizes, source or destination address, or port number.

以上是如何发现,那么入侵检测中具体做的事情可以看到:

Intrusion detectors must have

-some sort of sensor to detect attacks,  //传感器探测,软件传感器,知道黑客黑入后执行什么操作

-managers to do sensor fusion,

-databases for storing events for later analysis,

-tools for offline reporting and analysis,

-and a control console so that the analyst can modify intrusion detection .actions.

接着是恢复:

Tactics involved in recovering from an attack can bedivided into

- those concerned with restoring state and   //一方面考虑状态如何恢复,所以数据要经常做备份等

- those concerned with attacker identification. //了解谁入侵,考虑身份

The tactics used in restoring the system or data to a correct state overlap with those used for availability

- since they are both concerned with recovering a consistent state from an inconsistent state.

The tactic for identifying an attacker is

- to maintain an audit trail.  //审计

恢复需要靠不断的备份启动可用性,加在一起是完整的对系统安全性的考虑。

 

二、参考文件 References

l Single Sign On, http://en.wikipedia.org/wiki/Single_sign

l Kerberos: The Network Authentication Protocol,

http://web.mit.edu/kerberos/

l Kerberos(protocol),

http://en.wikipedia.org/wiki/Kerberos_(protocol)

l SAML,

http://en.wikipedia.org / wiki/Security Assertion_Markup_Language

l CAS, http:// www.jasig.org/cas

l Jasig CAS Documentation, http://www.unicon.net/ files/

cas-server-3-4-11-snapshot-manual.pdf

l CAS ppt, http:// www.jusfortechies.com/java/cas/ppt.php

CAS 为开源的实现,实现 Kerberos 

 

三、异步通信

异步通信用消息机制,先来看几个场景:

l Messaging in Java EE Applications

- What is a Messaging?   //考虑为什么使用消息机制

- What is JMS API?  //java 中消息机制

- JMS Programming Model //模型变更

l Kafka   //为什么使用 Kafka

- Introduction

- Quick start

image.png

在一个企业中碰到的最大问题是企业中会有各种各样的系统。会发现一个企业从小到大,各种各样的系统是逐渐开发起来,不是一次性搞定,例如 ERP 最先有。例如企业2015年先有 ERP,2016年 CRM,2017年上 Procurement与Groupware,以此类推。

此外,系统还需要与第三方系统进行交互,例如顾客、供应商、伙伴、雇员,但这带来两个问题

1、系统集成:会有很多系统进行交互:

image.png

需要做集成,带来的问题是:

这么多系统在交互时,可以使用异构的语言、数据库、操作系统,两两之间如果进行交互就要开发接口,开发接口根据不同的系统进行定制,数量多会带来如图

image.png

如果两两之间都要开发互相通信的端口,例如最左侧系统,两个实现源不同,所以需要开发两种不同的接口。图上红线全为接口,通信起来非常麻烦。

2、快速响应:

image.png

假设开发了一个订票服务,客户端发送请求,例如 web 系统 servlet 处理,首先需要在自己系统中寻找该用户是否为合法用户,如果是继续订,再找航线,例如需要从伦敦到北京,航线有直达有转机,该信息不在系统中,可能在航管局中,需要到它的系统中查找有哪些航线,找到航线后再查看航空公司,找到后查看航班,找到航班后查看是否有票,有则订票。逻辑中涉及到自己系统,航管局系统,航空公司系统,那么这三者之间,一个请求需要到三个不同系统中处理,并且航空公司系统离自身系统较远,所以完成操作在时间上对于用户很长,但是现实中看不到像携程订票等待时间并不长。如果一直等,响应时间会非常长。此外,需要访问系统有三个才能完成操作,假如航空公司系统崩溃,那么操作就会失败,想成功的前提是三个系统都正常运行,任何差错一出现,整个订票操作就会失败,即系统的容错性很差。

1、系统集成解决:用一个中介者模式进行解决。系统之间不要直接交互,都与中介者进行交互,中介者 mediator暴露一个统一接口,接收数据发送数据,通信时统一语言,使用纯文本。就不需要开发很多接口。纯文本如果规范就是suaprest,即 webservice,做异构系统的集成。中介者模式都使用文本进行处理,并且只有发和收两个接口,那么相当于系统向中介转发邮件一样,就相当于所有人在没有电话的年代,要想通信,给对方发封信,只需要将信交给邮局即可。要想知道别人发的信,可以在邮件检查自己的信箱。而系统是全部转发到 mediator 进行处理,这是消息中介解决的第一个问题,即异构系统的集成或同步系统要以中介者模式做集成,让大家两两之间不互相交互,那么系统集成代价降低。

2、异步通信解决:将事件改为下图

image.png

Servlet 在接收到客户端请求后会将请求存在一个信箱中,然后告诉用户,请求已经被接受,稍后通知。然后在后台会有一个程序不断查找是否有信,一旦有信,就会转发到后面进行处理,直到最后一步完成,才会处理完成将信箱中的信删除,然后告诉用户成功。但是如果过程中,如果一个系统不能访问,那么信就会被保留,不断尝试直到整个成功才会将信从 box 中删除。理解为信为客户端发送的请求,只有在尝试若干次不成功后才会放弃,不到 timeout会进行不断尝试。所以当用户发送一个请求后,会先告诉用户被接受,进行等待,就会立刻得到响应。处理结果是后台不断尝试,终于定完后再通过短信发送,与当时发送的请求可能相隔五分钟或者十分钟。

所以异步的好处:消除了单一故障节点(如果系统失败,则不断尝试,只要能尝试响应,便不断尝试)。

缺点:例如原来在调用时使用接口 book,要求传入 string 类型:用户名、int 类型:航班号、char[]数组类型:目的地,如果客户端发送的消息在调用后,参数类型不匹配就会立刻发现。但是在此处发消息不能这么做,需要在一个信中只能写文本,将内容全部转换成字符串,变成一个文本进行 send,send 方法里面的参数为 string,(为一个统一接口,不能传入上述三个参数,要求只能是一个 string)需要将所有内容全部转换成字符串才能传入。如果约定传入的字符串应该是键值对,例如{user:李四、des:london},如果写错为{username:李四 date:},那么在通过 send发送时可以返回。处理的逻辑在解析文本时得不到想要的东西这时才会发现错误,其实系统是一个弱类型。只要发字符串即可,至于字符串中的内容不是想要的,在编译时是不知道的,这就是所说的弱类型参数。第二个缺点为只能 send到IMS Destination 处,处理的结果是靠重新刷新或者发送短信,即 send 本身不会返回一个处理结果,所以没有结果值,也就不能抛出异常。因为 send 只是在 send 值接收过来后放到 box 即缓存中,真正的处理结果或者没处理成功需要抛出异常不能直接返回客户端。

以上就是异步通信的缺点,但是在此处需要用到优势,容忍这些缺陷。这两个场景的差异是:前面的场景类似于打电话,例如打电话让舍友帮忙找东西,那么就会一直不挂电话只能一直等待。后面的场景类似于发微信给舍友帮忙找东西,然后就可以做其他事,并且不能够立刻得到消息,找到后舍友回头再发送消息。但是在该过程中舍友到底什么时候找并不知道,所以这种场景容易接收消息机制。两种场景合并起来说明需要使用消息机制来异步通信。

l 什么是消息?

Messaging is a method of communication between software components or applications.  //软件或者应用之间进行通信 ,消息机制是进行通信的方式之一,但是在此不谈服务器或客户端的概念。或者在该场景中,客户端和服务器表达的意思与之前不同

- A messaging system is a peer-to-peer facility:   //接收消息与发送消息两方对等,都是消息服务器的客户端。当A给 B 发信,B 回信 A 时,两者对等。发信时不是直接发信,而是通过消息中介,例如 A 是你,B 是同学,那么消息中介就是邮局,邮局中有很多信箱,A 在发信时发送到B的信箱中,B 看信箱就可以看到,若想回信,发送到 A 的信箱中,A在信箱中可以看到。过程中可以看到是点对点的

- A messaging client can send messages to, and receive messages from any other client.  //无论 A 或 B 都是客户端,在发消息并且接收消息

- Each client connects to a messaging agent that provides facilities form, creating, sending, receiving, and reading messages.

Messaging enables distributed communication that is loosely coupled. 

l 发消息有什么好处?

JMS enables communication that is not only loosely coupled but also:

- Asynchronous: A receiving client does not have to receive messages at the same time the sending client sends them.The sending client can send them and go on to other tasks; the receiving client can receive tnem much later.    //异步,发消息未必要立刻处理。例如 a.m(),a 对象调用 m 方法时除非 m 返回一行代码无法执行,如果m 非常堵,等待的时间很长。例如交作业可以全部放在讲台上,进行批改,不需要等待很长时间。所以异步不需要阻塞一直等,提高效率。

- Reliable: A messaging provider that implements the JMS API can ensure that a message is delivered once and only once. Lower levels of reliability are available for applications that can afford to miss messages or to receive duplicate messages.  //可靠性,例如在排队有急事要走那么就得不到处理结果,但是如果是将作业放在讲台上处理完事情后批改,不需要担心作业是否会丢失,具有可靠性。在访问时一个请求如果对方不在,那么可以一直放到消息服务器中不断尝试,就能解决问题。 

l 为什么要使用消息机制?

image.png

例如上图是一个类似于在线售票的例子。如果是双十一,订单数非常多,系统来不及处理,只能先将订单放下,有空再进行处理。本质上类似:纵坐标是系统能够处理的请求数,例如有一个极限,横坐标为时间。如果真正的负载如图,在绝大多数时间内可以处理,就用同步调用,不需要使用消息机制,使用 a.m()下单即可。

但如果负载如图,那么在超出的时间内肯定处理不及时,在下面的时间内资源优势过剩,所以要想提高用户的体验度,解决方法是将资源翻倍,覆盖住最高点,但是资源浪费现象比较严重。还有一种方式是遇到超出时不进行处理,放置请求,先进行缓存,到低于的时间内再进行处理被缓存下来的请求。即在忙时收下来不进行处理,在闲时利用空隙处理掉,仍然使用这么多计算资源就可以搞定。唯一缺点是发过来的请求需要到下一个时间点才能处理,就是所谓的异步,但是总的用户体验比较好。对于用户不是在低的时间点才得到响应,是在该时间点上得到一个处理结果,当时就得到了一个响应。强调响应和处理结果不同,响应是告诉收下来等待,处理结果是订单没下成功。这就是异步通信带来的好处。

相关文章
|
5月前
|
数据处理 开发者 监控
揭秘实时Web应用开发:WebSocket与Akka Streams如何让Play Framework如虎添翼?
【8月更文挑战第31天】实时Web应用需求日益增长,覆盖了从即时通讯到在线游戏等多个领域。Play Framework结合WebSocket与Akka Streams,简化了高效实时应用的开发。WebSocket提供全双工通信,使服务器能主动向客户端推送消息;Akka Streams支持声明式数据流处理,有效避免系统因数据处理不及时而崩溃。本文通过示例代码展示了如何利用这些技术构建实时股票报价系统,展现了其在实时数据处理方面的强大能力。掌握这一技术组合,将大幅提升你在实时Web应用开发中的效率与稳定性。
58 0
|
消息中间件 缓存 前端开发
Messaging2(二)|学习笔记
快速学习 Messaging2(二)
Messaging2(二)|学习笔记
|
消息中间件 SQL Java
Messaging1(三)|学习笔记
快速学习 Messaging1(三)
125 0
Messaging1(三)|学习笔记
|
消息中间件 存储 负载均衡
Messaging2(三)|学习笔记
快速学习 Messaging2(三)
125 0
Messaging2(三)|学习笔记
|
消息中间件 Java Kafka
Messaging2(一)|学习笔记
快速学习 Messaging2(一)
105 0
Messaging2(一)|学习笔记
|
安全 Java 编译器
Security1 1(二)|学习笔记
快速学习 Security1 1(二)
Security1 1(二)|学习笔记
|
安全 Java 数据安全/隐私保护
Security1 1(三)|学习笔记
快速学习 Security1 1(三)
103 0
Security1 1(三)|学习笔记
|
安全 小程序 Java
Security1 1(一)|学习笔记
快速学习 Security1 1(一)
Security1 1(一)|学习笔记
|
SQL 机器学习/深度学习 Java
PyFlink 快速上手(一)|学习笔记
快速学习 PyFlink 快速上手
836 0
PyFlink 快速上手(一)|学习笔记
|
SQL Java API
PyFlink 快速上手(二)|学习笔记
快速学习 PyFlink 快速上手(二)
453 0
PyFlink 快速上手(二)|学习笔记