Maxiee Weekly No.1 20220617
文章
- 《一篇带你走近Kubernetes概貌与原理》
- 庞大的工具体系:运维保障、弹性调度、故障自愈等功能
- POD
- 最小单元,对容器层封装
- Docker 容器 or containinerd 容器……
- POD 内共享网络空间、hostname、存储
- 基于 Pod 的控制器
- 作用:调度 Pod 并运行其中容器
- Deployment:服务类、Web 类
- StatefulSet:为有状态服务设计
- Job、CronJob
- 调度策略:调度策略非常强大
- 高可用、故障自愈:
- 副控制器,复制 Pod 形成副本集
- deployment:自动检测实例数,拉新的,清挂的
- 容器检测探针:
- HTTP_GET 探针:正常返回表示服务正常
- TCP_SOCKET:TCP 连接判断存活
- exec:通过命令判断是否存活
- K8S 统一存储:
- PV:持久化存储
- 具体技术(Ceph、GlusterfS、LocalStorage)
- PVC:持久化存储声明
- PV:持久化存储
- 《Flutter For Web 编译的两种方案》
- Flutter Web 最初两套方案:
- HTML + CSS + Canvas:兼容性好,性能差
- CSS Paint API:性能好,兼容性不好,不支持文本
- 两个编译器:
- dart2js
- 发布时选择,tree-shaking 减小包大小
- 优化目标:编译后 JS 比手写的还快
- dartdevc
- 开发时选择,支持增量编译
- dart2js
- dart2jsSnapshot:
- 优化等级,o0~o4,减小产物大小,优化性能
- web 产物目录:
- assets 资源
- flutter_service_worker.js:多线程优化缓存,提升加载速度
- index.html:网页入口
- main.dart.js:应用代码
- Flutter Web 最初两套方案:
- 《opengl-tutorial》
- 一个 OpenGL 教程网站
- 这份教程比较适合新手入门,无需预备知识
- 用“傻瓜式C++”实现代码,代码中没有模板、类、指针。即使只懂 Java 也能理解代码。
- 《把玩飞镖:Dart VM 集成入门》
- 将 DartVM 嵌入任何项目,像 Flutter 那样
- Dart 代码执行模式
- 二进制 AST(Kernel Binary)JIT 执行
- 预热快照(AppJIT)JIT 执行
- AOT 快照(AppAOT)AOT 执行
- Dart 代码执行场景:
- 桌面 dart 命令:
- CFE 通用前端,.dart 编译为二进制 AST
- 在主 Isolate JIT 执行
- 对应模式1
- 桌面 dart --snapshot-kind=app-jit
- .dart 源码 JIT 执行,保存虚拟机状态快照 .snapshot
- 快照:VM 快速恢复现场,优化启动性能
- 举例:flutter run,直接加载 flutter_tools.snapshot 快照
- 对应模式2
- 桌面执行 dart2native:
- Dart 源码直接编译成机器码 .aot
- 类似原生 ELF 可执行格式
- 可以被预编译出的 dart_precompiled_runtime 动态加载执行
- 对应模式3
- 移动端 Flutter Debug:
- dart 源码桌面端被编译成 .dill 的 Kernel Binary
- .dill 通过 RPC 动态更新到设备上
- Flutter 增量编译、热重载的基础
- 对应模式1变体
- 移动端 Flutter Release:
- dart 源码桌面端被交叉编译成 ARM 机器码
- 与预编译的运行时相连
- 对应模式3变体
- 桌面 dart 命令:
- Flutter Release 为什么用 AOT 编译?
- AOT 并不一定强过 JIT,Java 为例
- 主要是满足 IOS 禁用 JIT 的政策限制
- 匹配移动端场景:性能快速释放,包体积
- 编译 DartVM 静态库
- Dart 没提供库编译模式,需要打 patch,Embedder Example
- 作者 Dart 团队的 Vyacheslav Egorov,大神
- 对应 gn 配置及编译方式
- 静态库及头文件拷出
- C++ 启动 DartVM
- dart::embedder::InitOnce 之后 Dart_Initialize
- Dart_CreateIsolateGroupFromKernel 加载 Kernel Binary,创建 Isolate
- 启动 Dart_RunLoop ,正式执行 Dart 代码
- iOS 接入 DartVM:加载 .dill 并运行
- 《说说 Flutter:Skia、Dart 及其历史》
- RIA (Rich Internet Application)
- YUI、dojo、ExtJS、Google Web Toolkit (GWT)
- 让 JavaScript 有开发复杂业务应用的能力
- Web2.0 黄金时代
- Google Web Toolkit
- 编程语言是 Java,编译成 JavaScript
- Chrome/V8 尚未出现,IE 仍为主流
- 2011 年落了数百个项目:Blogger、Map、AdWords、Inbox
- Dart
- 2011 年发布,部分成员来自 GWT
- Java2JavaScript 改为 Dart2JavaScript
- 迁移 Flutter 技术栈
- 新技术栈是团队推进关键阻碍
- 更尴尬的是,Dart 语言只此一家再用,对开发者不实惠
- 好处是进入成本也不高,Algol 系语言结构一脉相承
- 看团队成员的能力和接受程度
- Google 提供了足够丰富的工具支撑,Google 注重工程实践能力
- 新技术栈是团队推进关键阻碍
- Flutter 发展力度
- 正式版,稳定性有保障
- Fuchsia 默认 UI 框架,Google 技术投入足够
- 文档生态都比较丰富
- RIA (Rich Internet Application)
- 《React Native Skia—For Us, For You, and For Fun — Mobile (2022)》
- 由 Shopify 团队推出
- 支撑 Chrome、Android、Flutter 底层的核心基建是 Skia
- Skia 是一个跨平台绘制库:iOS、Android、macOS、Windows、Linux
- React Native Skia 是用 Skia 作为 RN 的底层渲染库,意义
- 解决 React Native 绘制性能低下的短板
- 新型 UI 设计工具:设计即 UI
- 基于 React Native 新架构的 JSI,JS 直接调用 C++,不再通过事件队列
- API 设计:
- 与 Flutter Skia 绘制 API 100%兼容,复用 API 的良好设计
- 提供 react-native-web 的 Skia 支持,通过 CanvasKit
- CanvasKit 是将 Skia 编译成 WebAssembly,由 Flutter Web 提出
- 采用声明式 UI,通过 React Reconciler 进行 Diff,将实际绘制开销最小化
- 提供了丰富的 API 接口:图片滤镜、shaders、SVG、路径操作、vertices、文本布局
- 未来演进:已经有人在基于 Skia 构建下一代的 React Native UI,也就是说,未来 React Native 也有自渲染方案了
- 《MongoDB全方位知识图谱!》
- 高可用、分布式、灵活设计
- NoSQL:No Schema,BSON 格式,好处:
- 复杂领域建模能力更强
- 易于开发迭代
- 降低运维成本
- 高可用:
- 复制集群:Primary、Secondary、Arbiter
- 保证数据一致性:Journal日志、Oplog、Checkpoint、节点选举
- 集群扩展:
- 数据均衡:rebalance
- 分片算法:区间分片、hash分片
- 自带数据压缩:
- 压缩之后再落盘
- 压缩算法:
- Snappy:默认,压缩比 3~5倍
- Zlib:5~7倍
- 前缀压缩:索引用的压缩算法,丢掉重复前缀
- zstd:MongoDB 4.2 新增,压缩率更高
- 存储引擎 Wired Tiger:B+Tree
- 《从单机到分布式数据库存储系统的演进》
- 字节跳动技术团队
- 三类主流存储产品:
- 块存储:低时延、高吞吐
- 对象存储:存视频、图片、音频非结构化数据,成本优先
- 文件系统:遵循 POSIX 语义,开源分布式实现多
- 单机数据库存储:
- B+ 树,内存效率高,磁盘效率高,数据结构统一
- 瓶颈:容量,扩容缩容,转录成本高
- 分布式数据库存储方案:
- MyRocks:RocksDB 替代 InnoDB
- Amazon Aurora
- Shared-Nothing
- 自研 veDB:
- 弹性:随时弹性扩缩容
- 易用性:兼容主流数据库(PostgreSQL、Mongo……)
- 极致性价比、极致可靠性
- 未来演进:
- HTAP/HSAP:实时
- AI Enhancement:调参、智能格式转换
- 硬件方向:
- 存储介质变革:SSD 往 persistent memory 转变
- 计算单元变革:多核处理器
- 网络设施:RDMA
- 《独立开发变现周刊(第58期):预售CSS课程,卖出55万美元》
- 公开分享开发过程:Gif、内容、预览,获取早期关注
- 不想成长得太快。Paul Jarvis的《Company of One》的粉丝,对为了发展而发展并不感兴趣。
- 《李永乐老师这个讲座关系到每一个人!房贷提前还款会不会吃亏?值得大家好好看看!》
读书
《一人公司起步的思维挑战》:
- 每个人都要走出自己的路,符合自己价值观的路,这才是真正有意义的人生。
- 应该由内在的价值驱动,别让外部价值影响你的人生。很多时候我们受外在因素诱导,追逐金钱、名利、声望,但过程中丧失了真正的自由,迷失了自己。
主题项目
每周我会给自己出一个项目的题目来完成。本周题目是 Flutter 引擎的自动化编译脚本。
Flutter 引擎自身比较庞大,代码拉取、编译都比较繁琐,我希望能够简化一下编译流程,实现一键自动化编译。