最近在搞devops
,有一点对Infrastructure as code
代码风格的感悟
直接从一个例子展开吧
假如需要将原来单账号下以下多网络分别创建到单独的账号下
1 | # network.auto.tfvars |
为了网络创建复用自然需要使用module
去按账号构建
(别想动态指定provider
,terraform
不支持!)
那问题是怎么将vpc
的配置按账号分组传递给对应的module
来看两种方案
最近在搞devops
,有一点对Infrastructure as code
代码风格的感悟
直接从一个例子展开吧
假如需要将原来单账号下以下多网络分别创建到单独的账号下
1 | # network.auto.tfvars |
为了网络创建复用自然需要使用module
去按账号构建
(别想动态指定provider
,terraform
不支持!)
那问题是怎么将vpc
的配置按账号分组传递给对应的module
来看两种方案
在Rust
中常有配置读写的操作,一般可以用Arc<RwLock<T>>
来实现,也可以用arc-swap
来。有什么不同?
下面拿一个例子来说明下
假设有个配置,会有一个read thread不断获取配置,配置更新时要实时反映出来。
之前写sealed trait
时没提他在oauth2-rs
中怎么用, 为什么用,这个其实在状态接口设计中很有用,今天展开聊聊。
今天聊聊typestate
模式。
新版oauth2-rs
使用这个模式是想解决一个问题。
在Oauth2
中,一般需要提前配置好auth_url
, token_url
, introspect_url
等,才能调用后续的鉴权相关功能。比如没有token_url
配置好,你就无法成功拿授权码(code
)获取token
。
但如果用户忘了配置,那就会在调用获取token
时才得到运行时错误。
能不能在编译时就把错误暴露出来,让用户提前感知问题?
这就是typestate
模式能很好解决的问题。
AWS Lambda Function
是轻量级的计算服务。优势是按需付费,专注于功能,服务本身如何构建暴露都有AWS
都不需要自己操心。
而按需付费基本就是服务使用时长和内存占用了,这个优化的话那妥妥的是Rust
的拿手好戏, 所以现在有好多Serverless
服务都用Rust
构建的Lambda Function
来搞。
今天简单看下如何用Rust
快速构建Lambda Function
(别担心没aws环境,往下看,有本地沙箱可尝试)
提到Rust
请求中间件, 就不能不提tower
。
tower
是一个请求协议无关的的中间件定义类库,主要定义了Service
和Layer
两个trait
来帮助实现可重用的请求处理中间件。
今天拿聊聊它如何巧妙构建起中间件。
我们知道Rust
的异步是以task
的调度来构建的。task
作为抽象在语言层面的调度单元。
那如果想要观测其的调度执行有没有办法呢?。
有的!异步runtime
库tokio
就有个tokio-console
可以实现对异步调度的观测和分析,其对了解调度的机制和性能分析都很有帮助。
Rayon
库是一个数据并行化(data-parallelism
)的 Rust
库。在并行编程里是一个很有趣的存在, 且非常的容易上手。它可以很轻松的将同步计算流程转化为并行计算。而且基本能保证编译通过就不会有data race
。