软件架构中“弹性”的多种含义

2023-02-21
阅读 3 分钟
1.3k
在软件架构领域的中文文档、书籍中,经常可以看到“弹性”这个专业术语,但在不同的语境下含义可能会不同。在英语中,elastic 和 resilient 两个单词都可以翻译为“弹性的”,但是它们在软件架构中代表的含义却完全不同,需要避免混淆。ElasticElastic 代表的“弹性”强调的是可伸缩性。在《Designing Data-Intensive Applicat...

密码学基础:编码方式、消息摘要算法、加密算法总结

2021-12-02
阅读 15 分钟
3.7k
每一个二进制位(bit)只能是 0 或 1。二进制位不会单独存在,而是以 8 个二进制位组成 1 个字节(byte)的方式存在,即 1 byte = 8 bit。
封面图

设计模式中的俄罗斯套娃:装饰者(Decorator)模式

2021-10-20
阅读 7 分钟
4.6k
在 Spring 框架开发的 Web 应用中,如果使用了 Spring Security 或 Spring Session,用 Debug 模式观察一下某个请求对应的 HttpServletRequest 对象,会发现这就是一个俄罗斯套娃:
封面图

Java 获取本机的外网 IP

2021-09-27
阅读 2 分钟
5.1k
原理通过 HTTP 访问第三方获取 IP 的服务接口获取本机的外网 IP,例如:[链接][链接][链接]等等...考虑到这些第三方接口不一定 100% 稳定,例如可能出现下线、错误、访问超时或太慢的情况,所以不能仅依赖其中之一。下面提供一种方案,并发访问这些服务接口,并返回第一个成功的结果,也就是其中最快的一个返回结果。实...

Java 8 CompletableFuture 对比 ES6 Promise

2021-08-31
阅读 7 分钟
5.2k
JavaScript 语言的执行环境是单线程的,异步编程对于 JavaScript 来说必不可少。JavaScript 传统异步解决方案主要是通过回调函数,而回调函数最大的问题就是 Callback Hell。所以 ES6 标准提供的 Promise 对象,专门用于解决异步编程的问题。

Java 中的加密算法: AES

2021-08-03
阅读 7 分钟
10k
非对称加密算法(asymmetric-key cryptography):加密和解密使用不同的密钥,例如公钥加密的内容只能用私钥解密,所以又称为公钥加密算法(public-key cryptography)。使用最广泛的非对称加密算法是 RSA 算法。

Redis 分布式锁原理及 Redisson 实现

2021-04-26
阅读 4 分钟
3.4k
The command SET resource-name anystring NX EX max-lock-time is a simple way to implement a locking system with Redis.

分布式链路追踪系统 Zipkin 埋点库 Brave 使用入门

2021-04-21
阅读 11 分钟
7.4k
微服务架构下,服务之间的关系错综复杂。从调用一个 HTTP API 到最终返回结果,中间可能发生了多个服务间的调用。而这些被调用的服务,可能部署在不同的服务器上,由不同的团队开发,甚至可能使用了不同的编程语言。在这样的环境中,排查性能问题或者定位故障就很麻烦。
封面图

基于 Netty 实现 WebSocket 服务器

2021-04-14
阅读 4 分钟
6.9k
WebSocket 协议是一种在单个 TCP 连接上进行全双工通信的协议,在建立连接完成握手阶段后,服务端也可以主动推送数据给客户端,使得 Web 浏览器和服务器之间的交互性更强大。

Java try-with-resources 中的几个细节

2020-07-23
阅读 4 分钟
7k
在 Java 7 之前,程序中如果有需要关闭的资源,例如 java.io.InputStream、java.sql.Connection 等,通常会在 finally 中关闭,例如:

Java 8 函数式编程:Lambda 表达式和方法引用

2020-04-22
阅读 6 分钟
3.4k
在很多其他语言中,函数是一等公民。例如 JavaScript 中,函数(Function)和字符串(String)、数字(Number)、对象(Object)等一样是一种数据类型。可以这样定义函数:

Java 8 Stream 总结

2020-04-17
阅读 12 分钟
4.9k
Classes to support functional-style operations on streams of elements, such as map-reduce transformations on collections.

Spring Cloud Eureka 服务实现不停机(Zero-downtime)部署

2020-03-24
阅读 3 分钟
3.8k
互联网产品高速迭代,通常伴随着高频次的版本发布。部署新版上线需要重启服务,直接 kill 服务进程可能会造成服务短暂不可用,从而影响到正在使用的用户。

Spring Data Redis 如何将 RedisTemplate 注入为 ListOperations 类型

2020-03-13
阅读 3 分钟
4.1k
RedisTemplate 和 ListOperations 并没有继承关系,这里是怎么将 RedisTemplate 注入到 ListOperations 类型上去的呢?而且不但可以将 RedisTemplate 注入到 ListOperations ,也可以注入到 ValueOperations、SetOperations、ZSetOperations、HashOperations 等类型上。

如何线程安全地遍历List

2019-11-03
阅读 6 分钟
6.1k
方式一的遍历方法对于 RandomAccess 接口的实现类(例如 ArrayList)来说是一种性能很好的遍历方式。但是对于 LinkedList 这样的基于链表实现的 List,通过 list.get(i) 获取元素的性能差。

Apache Commons DbUtils整合Spring框架实现简单的CRUD

2019-10-29
阅读 7 分钟
2.7k
Commons DbUtils是Apache提供的一个对JDBC进行简单封装的开源工具类库,能够简化JDBC相关的开发。Commons DbUtils可以非常方便的整合Spring Framework,比较轻量级,执行SQL语句非常方便(特别是查询语句),可以代替Spring JdbcTemplate、MyBatis等数据库访问层技术。

利用X-Forwarded-For伪造客户端IP漏洞成因及防范

2019-05-16
阅读 3 分钟
12.8k
在Java中,获取客户端IP最直接的方式就是使用request.getRemoteAddr()。这种方式能获取到连接服务器的客户端IP,在中间没有代理的情况下,的确是最简单有效的方式。但是目前互联网Web应用很少会将应用服务器直接对外提供服务,一般都会有一层Nginx做反向代理和负载均衡,有的甚至可能有多层代理。在有反向代理的情况下,...

Nginx失败重试中的HTTP协议幂等问题: non_idempotent

2019-04-21
阅读 3 分钟
11.7k
Nginx通过反向代理做负载均衡时,如果被代理的其中一个服务发生错误或者超时的时候,通常希望Nginx自动重试其他的服务,从而实现服务的高可用性。实际上Nginx本身默认会有错误重试机制,并且可以通过proxy_next_upstream来自定义配置。