-
无为与 DDD:让模型顺着业务的纹理生长
“道常无为而无不为。”——《老子》第三十七章引言青岛崂山太清宫相传始建于西汉,已有两千余年历史。太清宫后山的老君峰下,有一尊高达 50 米的老子铜像。铜像中的老子一手指天、一手指地,仿佛在提示天地之间的幽微秩序。老子被尊为道家的奠基者;以其名义流传的《老子》一书,又被广泛称为《道德经》,是道家的重要经典。“无为”,正是其中最有代表性的思想之一。把“无为”和 DDD 放在一起谈,乍看像一种跨界类比:一个来自两千多年前的思想传统,一个来自现代软件设计实践。前者谈治身、治国、处世,后者谈领域...
-
How it works - HDFS
HDFS 全称 Hadoop Distributed File System,是 Apache Hadoop 项目的核心分布式存储组件。它受 2003 年 Google 发表的《The Google File System》论文启发,早期从 Nutch/Hadoop 项目演进而来。HDFS 是现代大数据处理的存储基础,为 MapReduce、Spark、Hive、Flink、HBase 等上层计算、查询和存储系统提供高吞吐、高可靠的大文件存储能力。Hadoop 是 Apache 基金会的开...
-
How it works - Kafka
Kafka 经常被放在“消息中间件”这个大类里,但它和 RabbitMQ、ActiveMQ 这类传统消息中间件的出发点并不一样。Kafka 的核心抽象不是“队列中有一批待处理消息,消费者处理完就删除”,而是“一个可持久化、可分区、可复制、可按 offset 反复读取的追加日志”。生产者把事件追加到日志末尾,消费者自己记录读到了哪里;事件是否被某个消费者读过,并不决定它是否从 Kafka 删除。删除由保留策略决定。这个差异不只是实现细节,而是一套完全不同的哲学:传统队列更像任务分发系统,Ka...
-
How it works - 消息中间件
消息中间件最容易被低估。刚开始看,它只是一个“临时存消息的队列”;真正放到分布式系统里,它解决的是服务之间如何异步协作、如何削峰填谷、如何把失败隔离在局部、如何让多个下游系统在不互相阻塞的情况下消费同一份业务事实。但消息中间件也最容易被滥用。它不是分布式事务的万能补丁,也不是把同步调用换成异步调用就自动变可靠。消息一旦离开生产者,系统里就会出现新的问题:消息会不会丢、会不会重复、顺序如何保证、失败如何重试、堆积如何处理、消费者变慢会不会拖垮 broker、跨机房复制和网络分区时应该牺牲什么...
-
How it works - Elasticsearch
Elasticsearch 是什么Elasticsearch 是一个分布式搜索和分析引擎。很多人第一次接触它,是因为 ELK 日志系统:应用把日志写入 Elasticsearch,然后用 Kibana 查询和分析。但 Elasticsearch 并不只是一个日志库,它更准确的定位是:把文档数据组织成适合搜索、过滤、排序和聚合的数据结构,并把这些结构分布到多台机器上。虽然 Elasticsearch 也可以被看作一种数据库,但它并不适合作为通用数据库来使用。它的核心能力来自面向搜索和分析设计...
-
从 MySQL 到 PostgreSQL
过去很长一段时间,MySQL 几乎就是互联网业务的默认数据库。它好上手,生态成熟,托管服务也多;主键查询、简单事务、读写分离、分库分表这些套路,大家都熟。但这几年情况变了。越来越多的系统和团队,开始把 PostgreSQL 当成默认选择。这不是说 MySQL 不能用了,也不是 PostgreSQL 一定更快,而是大家对数据库的要求变了。为什么 PostgreSQL 越来越受欢迎Stack Overflow Developer Survey 的数据库调查中,PostgreSQL 近几年已经排...
-
在 Python 中使用 StateMachine
在软件开发过程中,大量的工作集中于管理和处理事物状态。通常,一个事物会因为某个事件从一个状态向另一个状态转变。例如,在游戏中,怪物可能会因为听到玩家的声音而进入警觉状态,然后在看到玩家时发动攻击。在交战过程中,它根据玩家的位置和状态使用不同的技能。在业务系统中,订单可能存在诸如新建、待付款、已发货、已完成等各种业务状态,而各种业务操作则推动订单状态的持续变化。在涉及复杂状态场景的情况下,如果不能有效地设计模型,就可能产生大量重复代码,并可能导致Bug。为了解决这类问题,我们经常采用状态机来...
-
我们需要多少测试人员
在工作中,我们经常会遇到这样的情况:甲方希望开发一个简单的小程序,不同乙方公司的报价却存在显著差异。比如,有的公司把测试工时算到总工时的一半,有的公司几乎不单独列测试工时。同样的项目,为什么报价会相差这么多?测试工时少了,能否保证质量?测试工时多了,就一定能保证质量吗?实际上,一个项目需要多少测试人员,并没有固定答案。对于业务逻辑简单、规模较小的项目,可能并不需要专职测试人员。而对于规模较大,尤其是涉及多个团队共同协作的项目,专职测试人员往往必不可少,有时甚至需要一个专门的测试团队。不同公...