ITPub博客

首页 > IT职业 > > 《Java工程师修炼之道》读书笔记-Part 2

《Java工程师修炼之道》读书笔记-Part 2

作者:gyu 时间:2019-10-10 11:43:59 0 删除 编辑

7. 开源日志管理方案 -ELK

Logstash -- 多个独立的Agent 负责收集不同来源的数据,一个中心Agent 负责汇总和分析数据。

Elasticsearch -- 用于存储最终的数据,并提供搜索功能。

Kibana -- 提供一个简单、丰富的Web 界面,数据来自 Elasticsearch,支持各种查询、统计和展示。

还可以在远程Logstash 和中心 Logstash 之间加入 Redis、Kafka等中间层,作为缓冲和中间存储,提高系统性能和可靠性。

8. 数据传输方案

(1) RESTful

RESTful 基于HTTP协议,主要依赖于HTTP协议的集中method来表示CRUD操作;

RESTful 使用HTTP URL 标识并定位一个资源;

原则上只使用名词来指定资源,而且推荐使用复数;

URL 大小写敏感,尽量使用小写字母;

(2) RPC

RPC主要依赖的技术:序列化、反序列化和数据传输协议;

Java使用比较多的RPC方案有:RMI、Hessian、Dubbo以及Thrift等;

(3) 消息中间件

9. 消息队列 Message Queue

消息队列的应用场景

解耦

最终一致性

广播

错峰与流控

消息模型:

队列 P2P

发布/订阅 pub/sub

消息中间件

(1) ActiveMQ

性能较差,不推荐在大规模互联网应用中使用;

(2) RabbitMQ

基于AMQP协议,是一个完备的消息中间件;

适用于可靠性要求较高,对消息有事务要求的业务场景。

只能保证At Least Once(消息至少被消费一次)的消费,无法从自身进行消息去重。

如果要达到Exactly Once(消息会且仅会消费一次),应该由业务做去重处理,或者业务消息本身就具有幂等性。

(3) Kafka

基于文件append,以顺序读/写的方式来写入/读取文件,性能非常高,支持多订阅者。

Kafka 设计的初衷是处理日志,因此是允许消息丢失的,对事务的支持也不好,并不能保证消息的顺序。

Kafka 适用于海量消息场景,允许极端情况下少量丢失数据。

一个Topic 可以分为多个Partition,每个Partition 内部是消息有序的。

由于分区的原因,Kafka 无法保障全局消息有序,但是使用只有一个分区的Topic时,可以保证消息全局有序。

10. Java 网络编程

阻塞和非阻塞

是函数/方法的实现方式,即在数据就绪之前,是立刻返回还是等待。也就是发起 I/O 请求是否会被阻塞。

一个网络 I/O 读过程是:数据从网卡 -> 内核缓冲区 -> 用户内存的过程。

同步和异步

区别主要在于:数据从内核缓冲区到用户内存的这个过程,需要不需要用户进程等待。也就是实际的 I/O 读写是否阻塞请求进程。

阻塞 I/O 模型 - BIO

非阻塞 I/O 模型 - AIO

异步 I/O 模型 - AIO

11. JVM 内存模型

JVM 内存模型屏蔽了底层硬件环境的差异,给Java应用程序提供了统一的内存访问模式,可以认为是一种虚拟内存环境。

在Java程序中,所有线程都共享主内存(堆),但是对于每一个线程都有自己的工作内存(一个虚拟的概念,包括寄存器、栈、写缓存、缓存以及其他硬件、编译器优化等)。

工作内存和主内存(堆)通过一些规定的操作来交互同步数据,而线程只能访问自己的工作内存。

主内存就是堆,用来保存对象信息;

工作内存就是栈,用来保存线程私有的对象地址、基本类型、局部变量、PC指针等信息;

12. 安全协议 -- SSL/TLS

SSL: (Secure Socket Layer,安全套接字层)

TLS: (Transport Layer Security,传输层安全协议)

SSL和 TLS 都是用于保障端到端之间连接的安全性,位于应用层和传输层之间。

SSL 现在已经改名为 TLS。

HTTPS 相比 HTTP 多了一个安全加密层(TLS/SSL),不仅对数据进行了加密,还对数据完整性提供了保护。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/832/viewspace-3139119/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-12

  • 博文量
    129
  • 访问量
    1327