宇宙湾

厚积薄发

Serverless 是什么?

Serverless computing is a cloud computing execution model in which the cloud provider runs the server, and dynamically manages the allocation of machine resources. Pricing is based on the actual amount of resources consumed by an application, rather than on pre-purchased units of capacity. It can be a form of utility computing. — wikipedia.org

Serverless architectures are application designs that incorporate third-party “Backend as a Service” (BaaS) services, and/or that include custom code run in managed, ephemeral containers on a “Functions as a Service” (FaaS) platform. — 《Serverless Architectures》

无服务器架构是基于互联网的系统,其中应用开发不使用常规的服务进程。相反,它们仅依赖于第三方服务(例如 AWS Lambda 服务),客户端逻辑和服务托管远程过程调用的组合。 — 亚马逊 AWS 官方博客

Serverless(无服务器架构)是指服务端逻辑由开发者实现,运行在无状态的计算容器中,由事件触发,完全被第三方管理,其业务层面的状态则存储在数据库或其他介质中。 — 《无服务架构实践手册》

If your PaaS can efficiently start instances in 20ms that run for half a second, then call it serverless. — Adrian Cockroft

优缺点

优势

低成本

运维成本

 服务器、中间件、数据库等均托管于 BaaS/FaaS 平台,用户无需再参与基础设施及软件的维护,省去了集群的运维成本

开发成本

 对比 IaaS 或者 PaaS 平台的服务器或者操作系统,Serverless 的架构中,用户操作的是服务化的组件,比如存储服务、授权服务等,可以缩短开发周期,节约时间成本

按需计费

 Serverless/FaaS 区别于 IaaS/PaaS 预先分配计算资源的计费方式,其计费方式通常是按请求次数及运行时间。如此一来,不仅可以最大程度地利用资源,还能实现真正的按需计费,以降低用户的使用成本

Serverless cost

(使用 iPad™ 手绘而成)

高扩展

 自动进行横向扩展(毫秒级部署,秒级生命周期)

高资源利用率

 提供细粒度的计算能力,最大限度满足实时需求,使得资源利用率大幅度提升

NoOps

 运维的发展经历了,人肉运维、自动化运维、DevOps、AiOps 等。而 Serverless 模式下,用户只需要关心业务编码,真正实现了零运维成本

从更广泛的意义上来讲,Ops 除了指服务器维护,还会包括部署、网络、安全、监控、故障恢复和水平扩展等
阅读全文 »

Kafka 是什么?

 Kafka is a distributed, partitioned, replicated commit log service. It provides the functionality of a messaging system, but with a unique design.

为什么要有 Kafka?

分布式

 具备经济、快速、可靠、易扩充、数据共享、设备共享、通讯方便、灵活等,分布式所具备的特性

高吞吐量

 同时为数据生产者和消费者提高吞吐量

高可靠性

 支持多个消费者,当某个消费者失败的时候,能够自动负载均衡

离线 & 实时性

 能将消息持久化,进行批量处理

解耦

 作为各个系统连接的桥梁,避免系统之间的耦合

阅读全文 »

《PySpark 大数据分析实战》兼备全面的理论知识,更具众多的实战案例,着实是一本不可多得的佳作。作者结合多年实战经验,从基础概念出发,循序渐进至高级应用,完整展示了 PySpark 的知识体系。无论你是大数据的初学者,还是经验丰富的领域专家,此书都能为你提供实用的参考和专业的指导。

阅读全文 »

关于本文

 虽然接触 Java 已经十余年之久,可惜学习之初的笔记文档没能很好地保存下来。本文是近几年工作学习中遇到的一些零散的知识点,包括了 基础概念、实用的编程技巧、代码可读性、设计模式、性能优化(工具 & 编码)、测试相关、JVM 相关、常用的工具和常见问题。本着好记性不如烂笔头的初衷,在不断地踩坑和爬坑的过程中,慢慢地记录成文。期待着本文能起到抛砖引玉的作用,以看到大家的真知灼见。

基础知识

注解

GuardedBy

 @GuardedBy 注解可以作用于某一个属性或者方法,约定在访问这些被注解标记的资源时,能被同步代码块保护着。简单的使用案例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@GuardedBy("obj")
private ConcurrentMap<String, String> map = new ConcurrentHashMap<>();
private final Object obj = new Object();

public void put(String k, String v) {
synchronized (obj) {
map.put(k, v);
}
}

/**
* If you use `error prone` tool to check this, this annotation should be `@SuppressWarnings("GuardedBy")`
* {@see https://errorprone.info/bugpattern/GuardedBy}
* {@see https://github.com/apache/druid/pull/6868#discussion_r249639199}
*/
@SuppressWarnings("FieldAccessNotGuarded")
public void remove(String k) {
map.remove(k);
}

@Override
public String toString() {
synchronized (obj) {
return "GuardedByExample{" +
"map=" + map +
'}';
}
}

Tips: Code Example from Apache Druid;另外,error-prone 工具支持对多种版本@GuardedBy 进行检查

阅读全文 »