• 我们需要多少测试人员

    在工作中,我们经常会遇到这样的情况:甲方希望开发一个简单的小程序。不同乙方公司的报价却存在显著差异,比如有的公司将测试工时占到一半,而有的公司几乎不包含测试工时。同样的项目,为什么各公司的报价能相差如此之大呢?测试工时少了,能否保证质量?测试工时多了,就一定能保证质量吗?实际上,对于一个项目需要多少测试人员,并没有一个固定的标准答案。对于业务逻辑简单、规模较小的项目,可能并不需要专职的测试人员。而对于规模较大,尤其是涉及多个团队共同协作的项目,专职的测试人员是必不可少的,有时甚至需要一个专...

  • 不可不知的 NUMA 架构

    随着虚拟化和容器技术的广泛应用,服务器的配置水平不断提升。如今,一台服务器的内存动辄数百GB,CPU核心数量达到上百也屡见不鲜。过去需要一个机柜才能容纳的服务器,现在可能只需一台就能满足需求。这种多CPU、多任务并行运行的模式,给服务器的架构设计带来了巨大的挑战,于是NUMA(非统一内存访问)架构应运而生。NUMA架构能够显著提升多任务处理的性能。目前,绝大多数服务器都支持NUMA架构。然而,要想充分发挥NUMA架构的优势,如何高效地使用内存至关重要。正确配置和优化内存使用策略,可以极大地...

  • 大教堂与市集

    在软件工程历史上,Eric S. Raymond 于 1997 年发表的文章《The Cathedral and the Bazaar》(大教堂与市集)是一篇具有里程碑意义的重要文献。文章用“大教堂”和“市集”类比了“自上而下”和“自下而上”两种软件开发方法,深入探讨了软件开发过程中的不同方法论及其影响。这篇文章不仅对开源社区产生了深远影响,还为现代软件开发人员提供了宝贵的经验教训。大教堂与市集大教堂模式的特点是源代码在软件发行后公开,在软件的每个版本开发过程中由一个专属的团队控管。作者以...

  • How it works - Fluentd

    日志是计算机系统运行中不可或缺的一部分。随着分布式架构的广泛应用,集中的日志管理已经成为每个系统环境的必备基础设施。过去大家普遍采用的开源方案是 ELK 架构,随着时代的发展,不断地有新的工具涌现出来。Fluentd 便是新一代的日志收集工具,它使用 CRuby 开发,与笨重的 Logstash 相比,显得十分精致、高效。本文将介绍 Fluentd 的架构和功能使用。Fluentd 的基本架构Unified Logging LayerFluentd 的目标是创建统一的日志层(Unified...

  • Kubernetes 进阶使用之 Helm,Kustomize

    Declarative vs imperativeKubernetes 一个非常优秀的特点是,它是基于状态的。我们告诉 Kubernetes 我们需要运行什么样的资源( Pod, Service 等),以及这个资源对应的状态(参数,状态等),Kubernetes 帮助我们确保这些资源按我们要求的状态运行。也就是说,如果我们告诉 Kubernetes 使用 nginx:latest 镜像,运行 1 个名为 nginx-pod 的 Pod,Kubernetes 就会努力确保有且仅有 1 个 i...

  • 理解 Python 中的协程

    asyncio 是 Python 下开发 I/O 密集型应用的最佳选择,而使用 asyncio 又离不开协程。什么是协程协程是一种可以中断运行,在某个时间点再恢复运行的程序组件。这个定义和协程的字面意思一点关系没有,刚接触时,理解起来是十分晦涩的。我们先看其英文 coroutine 会更好理解一些,“co-“ 这个前缀有”一起,共同”的意思,比如 co-author 表示合著一本书的作者,coexist 表示共存。类似的我们可以把 coroutine 理解为共同,协作运行的程序组件。如何理...

  • GIS基础知识 - 坐标系、投影、EPSG:4326、EPSG:3857

    最近接手一个GIS项目,需要用到 PostGIS,GeoServer,OpenLayers 等工具组件,遇到一堆地理信息相关的术语名词,在这里做一个总结。大地测量学 (Geodesy)大地测量学 是一门量测和描绘地球表面的学科,也包括确定地球重力场和海底地形。大地水准面 (geoid)大地水准面 是海洋表面在排除风力、潮汐等其它影响,只考虑重力和自转影响下的形状,这个形状延伸过陆地,生成一个密闭的曲面。虽然我们通常说地球是一个球体或者椭球体,但是由于地球引力分布不均(因为密度不同等原因),...

  • 自动清理 Nexus 中的过期镜像

    自动清理过期镜像Nexus Repository 是一款非常好用的私有仓库,支持 Maven、Docker、Yum、PyPi等等,基本主流的类型都支持。自从使用了持续集成以后,我们会自动对新代码进行编译打包发布到开发环境中,以便尽快地对新代码进行测试。这样导致的问题就是 Nexus 中的 Docker 库占用的空间越来越大。Nexus 本身提供了 Cleanup 功能,可以将一段时间之前的镜像删除,但是如果全部按过期时间去删除,会导致一些长时间以前上传,但是还需要使用的镜像也删除。幸运的是...