24年1月大科技公司的工程博文摘要

过去两周科技公司的工程博客上最值得关注的文章:用微服务重建Netflix视频处理管道、Cloudflare的DDoS威胁报告、提高Expedia航班搜索速度、衡量预订移动应用性能等等!

1. “用微服务重建Netflix视频处理管道”
Netflix⸱ 12分钟阅读⸱1月10日
这篇文章是Netflix关于他们如何通过微服务重建视频处理流水线的系列博客的第一部分。他们介绍了他们在过去几年中如何将视频处理流水线重新构建在他们的下一代计算平台Cosmos上。他们通过识别边界和定义服务,将视频处理流水线分解成多个微服务,并介绍了每个服务的功能。他们还讨论了Cosmos平台的优势,并分享了他们的经验和教训。

  • 解释从集中式线性编码到基于块的分布式编码的转换
  • 介绍了从专用实例到利用自动伸缩微服务的转变,以提高计算弹性
  • 分享新平台的优势,包括功能交付的便捷性和对广告处理等新业务需求的支持


2. “使用RocksDB构建Pinterest的新宽列数据库”
作者Rajath Prasad⸱ Pinterest ⸱13分钟阅读⸱04 Jan

Pinterest在2020年决定将公司内的不同键值系统整合为一个名为KVStore的统一服务。为了实现这一目标,他们构建了一个基于RocksDB的宽列无模式数据库,命名为Rockstorewidecolumn。这篇文章详细介绍了他们如何使用RocksDB构建了这个可扩展、高可用的宽列数据库,并提供了关于数据模型、API和关键功能的信息。此外,最后一节还解释了这个新数据库如何支持产品中的关键平台。

  • 介绍支持的特性,如版本值、TTL和响应分页
  • 介绍合并键值系统的决策背后的动机
  • 探讨数据模型、api和数据库的关键特性的细节
  • 共享有关数据库如何支持产品中的关键平台的信息

3. 面向开发者的10种微服务设计模式
第一资本⸱ 13分钟阅读⸱1月09日
本文介绍了10个微服务设计模式,用于改善架构,使组织更易于管理。微服务架构通过将每个微服务作为独立的进程运行来解决了单体架构的问题。使用这些设计模式可以提高开发效率和准确性。其中包括数据库分服务模式、Saga模式、API网关模式、聚合器设计模式、断路器设计模式、命令查询职责分离(CQRS)模式、异步消息模式、事件溯源模式、窒息者模式和分解模式。这些设计模式可以帮助开发者更好地构建微服务应用。

  • 描述微服务体系结构的每个服务数据库模式
  • 探讨在分布式事务期间维护数据一致性的Saga模式
  • 涵盖用于将客户端与服务分区隔离的API网关
  • 共享命令查询责任隔离(CQRS),以降低复杂性并提高应用程序性能

4. 2023年第四季度DDoS威胁报告
作者 Omer Yoachimik和Jorge Pacheco⸱Cloudflare ⸱ 20分钟阅读⸱1月9日
2023年第四季度的DDoS威胁报告显示,网络层DDoS攻击增长了117%,尤其是在黑色星期五和假日季节期间,针对零售、物流和公共关系网站的攻击活动增加。同时,针对台湾网站的DDoS攻击流量增长了3,370%,针对以色列网站的攻击流量增长了27%,而针对巴勒斯坦网站的攻击流量则增长了1,126%。此外,在第28届联合国气候变化大会期间,环境服务网站的DDoS攻击流量激增了61,839%。总体而言,DDoS攻击在规模和复杂性上都达到了新的高度,需要引起重视。

  • 讨论了网络层DDoS攻击的增加,特别是在黑色星期五和假日期间针对零售、运输和公共关系网站的攻击
  • 描述了针对环境服务网站的DDoS攻击流量激增与COP 28一致
  • 概述了攻击向量和属性,包括ACK-RST洪水、CLDAP洪水和SPSS洪水等新兴攻击向量

5. “搜索速度:让Expedia航班更快”
这篇文章介绍了Expedia Group是如何通过一系列性能优化措施来提高用户在Expedia平台上搜索航班的速度和体验的。他们采取了多种方法,包括预取静态资源、优化缓存、预测搜索条件、优化GraphQL查询、异步加载和微前端架构等,最终使得页面可用时间提高了52%,耗时减少了40%。这些优化措施显著提升了用户在Expedia上搜索航班的速度和体验。

  • 给出用于测量搜索速度的性能指标的概述
  • 探索改进性能的实验性举措,例如预取和缓存
  • 分享这些计划的影响,在页面可用时间上提高52%,在非供应开销上提高40%
  • 介绍了微前端架构的使用,以提高构建大小和灵活性

6. Python中的命令注入:示例和预防
作者:Rubaiat Hossain⸱ Snyk⸱ 13分钟阅读⸱12月21日
这篇文章讨论了在Python程序中如何防止命令注入攻击。命令注入是指攻击者通过将恶意命令注入到存在漏洞的程序中来执行任意系统命令的一种安全漏洞。文章提到了几种常见的导致命令注入的漏洞,包括对用户输入的不安全处理、不正确使用系统命令和subprocess模块、动态构建命令时缺乏安全检查以及不安全使用eval()函数等。为了防止命令注入,文章提出了一些安全最佳实践,如正确验证和清理输入、使用参数化查询和预处理语句、谨慎使用shell=True参数、避免将用户输入直接传递给os方法等。此外,文章还介绍了一些安全编码规范和工作流程,如定期代码审查和安全审计、及时更新软件和库、利用安全工具和框架等。

  • 描述导致命令注入漏洞的常见场景
  • 探讨与动态命令构造和不安全使用eval()相关的风险
  • 分享缓解Python应用程序中的命令注入漏洞的指导方针
  • 介绍安全Python开发的安全编码约定和最佳实践

7. Cloudflare日志记录管道概述
作者: Colin Douch ⸱Cloudflare ⸱8分钟阅读⸱08 Jan
Cloudflare的Observability Platform团队负责管理和改进内部日志传输管道,以实现高可用性和满足服务水平目标(SLO)。他们使用各种日志库将每个服务的调试日志发送到集中的位置,并通过不同的组件进行处理和存储。他们的日志管道通过多个数据中心进行冗余备份,使用Kafka进行缓冲,并最终存储在ElasticSearch和Clickhouse中。未来的计划包括提高多租户能力,迁移到Open Telemetry,改进Kafka集群的负载平衡等。

  • 描述各种日志库的使用,如Go的zerolog、c++的KJ_LOG或Cloudflare的rust日志
  • 探讨如何使用syslog-ng从每台机器收集日志,并通过log-x操作提供冗余
  • 涵盖Kafka中日志的缓冲
  • 分享即将到来的项目,以改善Cloudflare的日志记录管道,包括多租户功能和向Open Telemetry的迁移

要点:
  • Cloudflare的内部日志管道旨在将从每个服务收集的调试日志集中到一个地方,以实现近实时的操作和调试。
  • Logging基于BSD Syslog Protocol的日志集中原则,通过系统日志和syslog-ng等工具实现日志收集、重写和转发。
  • 为了保证高可用性和数据冗余,Cloudflare使用log-x操作将日志复制到两个主要数据中心,并通过Kafka和ElasticSearch/Clickhouse等后端进行存储和查询。

8. “Prezi如何服务客户流量”
作者:Alex⸱ Prezi ⸱8分钟阅读⸱1月9日

  • 描述AWS Global Accelerator如何减少客户请求的延迟
  • 介绍AWS WAF和Shield提供的针对DDoS攻击的保护
  • 分享使用CloudFront进行内容交付以减少加载时间和成本的重要性

9. 介绍Cloudflare的2024年API安全和管理报告
作者:John Cosgrove和Sabina Zejnilovic⸱Cloudflare ⸱ 14分钟阅读⸱1月09日
以会话标识为基础的API发现和精确的速率限制是保护API安全的关键措施。

  • 探讨使用速率限制来减少攻击的可能性
  • 分享关于保护api免受web应用程序攻击的见解
  • 介绍API流量的人为驱动性质及其对安全性的影响

10. 解决Node.Js中的异步上下文挑战
作者:Israel Zablianov⸱ Wix⸱ 9分钟阅读⸱1月09日
在Node.js中,管理异步流之间的上下文是一个挑战,因为它是单线程的。
传统的多线程环境中可以使用线程本地存储(TLS)来实现上下文的管理,但在Node.js中不适用。
Node.js提供了AsyncLocalStorage API来解决这个问题,它类似于其他语言中的线程本地存储,可以在异步流中传播上下文。

本文介绍了在异步流程中管理上下文的最佳方法。传统的多线程编程可以使用线程本地存储(TLS)来存储与请求相关的上下文信息。然而,Node.js是单线程环境,无法直接使用TLS。文章介绍了一种解决方案,即使用Node.js的内置API AsyncLocalStorage来实现类似TLS的功能。通过使用AsyncLocalStorage,可以在异步操作的调用链中传播当前异步操作的上下文,而无需在每个函数调用中显式传递。文章还对AsyncLocalStorage的性能进行了测试,并提供了使用AsyncLocalStorage的性能优化建议。

  • 探讨了使用全局对象作为上下文的局限性,以及在Node.Js中实现多线程方法的挑战
  • 提出了使用AsyncLocalStorage API在调用链中传播上下文的解决方案
  • 分享AsyncLocalStorage的性能分析及其对应用程序性能的影响
  • 解释AsyncLocalStorage的潜在上下文丢失和性能影响

11. 《掌握Python虚拟环境:venv、Docker和保护代码的完整指南》
作者:Liran Tal⸱ Snyk⸱ 9分钟阅读⸱1月10日

  • 介绍如何使用venv创建和激活虚拟环境
  • 介绍如何使用Docker创建本地Python开发环境
  • 分享如何保证Python Docker应用程序的安全

12. “衡量生产中的移动应用性能”
作者Gleb Tarasov⸱Booking.com ⸱ 12分钟阅读⸱1月11日
他们主要关注应用启动时间、屏幕交互时间和帧渲染性能这三个关键指标。

  • 分享为什么现有的用于监控应用程序性能的第三方工具不符合要求
  • 涵盖需要监控的主要用户关注点,例如:
    • 应用程序启动时间
    • 屏幕互动时间
    • 帧渲染性能
  • 在GitHub上介绍了iOS和Android的开源性能跟踪库

13. 《纽约时报填字游戏的手写识别实验》
作者:Shafik Quoraishee⸱《 纽约时报》⸱ 10分钟阅读⸱1月8日
文章详细描述了他们在Android平台上实现On Device ML的过程,包括手写输入的准备工作、数据处理和规范化、建立深度卷积神经网络等关键步骤。成功地将手写字母转化为可识别的字符,并展望了这一功能在游戏应用中的潜力。

  • 描述了在Android Crosswords应用程序上实现On Device ML的过程
  • 探讨手写识别的数据准备、条件反射和规范化过程
  • 分享在构建用于字母识别的深度卷积网络时所面临的挑战和解决方案


14. “使用一个DOM元素嵌入多色图标”
这篇文章介绍了一种使用SVG和CSS技术来嵌入图标的方法。通过将图标分解为不同的部分,并使用CSS控制每个部分的颜色,可以实现主题化、可缓存和易于嵌入的图标。该方法还提供了更好的性能和可定制性。作者提供了具体的实现步骤,并展示了一个演示。

  • 从在现代ui中嵌入图标的挑战开始
  • 介绍使用单个DOM元素和一个外部SVG控制图标颜色的SVG+CSS技术,该技术涵盖了逐步实现
  • 分享该技术的优点,包括缓存和可定制性

要点:
  • 使用SVG+CSS技术可以在一个DOM元素和一个外部SVG文件中控制一个有3种颜色的图标。
  • SVG片段和CSS遮罩是实现该技术的关键要素。
  • 这种技术具有缓存、可定制和易于嵌入的优点,能够提高性能并适应主题设计系统的挑战。