公司:又拍云
浅谈 Linux 下 vim 的使用
温习下Vim的常用命令。
使用 OpenAPI 构建 RESTful API 文档
作为一名开发者,往往需要编写程序的 API 文档,尤其是 Web 后端开发者,在跟前端对接 HTTP 接口的时候,一个好的 API 文档能够大大提高协作效率,降低沟通成本,本文就来聊聊如何使用 OpenAPI 构建 HTTP 接口文档。
如何高效实现 MySQL 与 elasticsearch 的数据同步
由于传统的 mysql 数据库并不擅长海量数据的检索,当数据量到达一定规模时(估算单表两千万左右),查询和插入的耗时会明显增加。同样,当需要对这些数据进行模糊查询或是数据分析时,MySQL作为事务型关系数据库很难提供良好的性能支持。使用适合的数据库来实现模糊查询是解决这个问题的关键。
但是,切换数据库会迎来两个问题,一是已有的服务对现在的 MySQL 重度依赖,二是 MySQL 的事务能力和软件生态仍然不可替代,直接迁移数据库的成本过大。我们综合考虑了下,决定同时使用多个数据库的方案,不同的数据库应用于不同的使用场景。而在支持模糊查询功能的数据库中,elasticsearch 自然是首选的查询数据库。这样后续对业务需求的切换也会非常灵活。
那具体该如何实现呢?在又拍云以往的项目中,也有遇到相似的问题。之前采用的方法是在业务中编写代码,然后同步到 elasticsearch 中。具体是这样实施的:每个系统编写特定的代码,修改 MySQL 数据库后,再将更新的数据直接推送到需要同步的数据库中,或推送到队列由消费程序来写入到数据库中。
但这个方案有一些明显的缺点:
- 系统高耦合,侵入式代码,使得业务逻辑复杂度增加
- 方案不通用,每一套同步都需要额外定制,不仅增加业务处理时间,还会提升软件复复杂度
- 工作量和复杂度增加
在业务中编写同步方案,虽然在项目早期比较方便,但随着数据量和系统的发展壮大,往往最后会成为业务的大痛点。
从 B 站出发,用 Chrome devTools performance 分析页面如何渲染
页面是如何渲染的?通常会得到“解析 HTML、css 合成 Render Tree,就可以渲染了”的回答。但是具体都做了些什么,却很少有人细说,我们今天就从 Chrome 的性能工具开始,具体看看一个页面是如何进行渲染的,以及进行页面优化时需要关注哪些指标。
以“老二次元”网站 bilibili 为例,我们将通过分析 performance 面板,串联起 Chrome 页面渲染流程,以及页面的部分量化指标的含义,来看页面具体是如何渲染的。
关于 GIN 的路由树
GIN 是一个 golang 常用的 Web 框架,它对 API 比较友好,源码注释也很明确明确,使用起来快速灵活,还有极高的容错率。标题中的路由我们可以简单理解为在浏览器中输入的页面地址,而“树”则是 一种优化的数据结构。 因为在 GIN 这个 Web 框架中的路由树是前缀树,所以我们今天会围绕前缀树来讲解。
Golang 常见设计模式之单例模式
之前我们已经看过了 Golang 常见设计模式中的装饰和选项模式,今天要看的是 Golang 设计模式里最简单的单例模式。单例模式的作用是确保无论对象被实例化多少次,全局都只有一个实例存在。根据这一特性,我们可以将其应用到全局唯一性配置、数据库连接对象、文件访问对象等。Go 语言实现单例模式的方法有很多种,下面我们就一起来看一下。
如何处理大体积 XLSX/CSV/TXT 文件?
在开发过程中,可能会遇到这样的需求,我们需要从本地的 Excel 或 CSV 等文件中解析出信息,这些信息可能是考勤打卡记录,可能是日历信息,也可能是近期账单流水。但是它们共同的特点是数据多且繁杂,人工录入的工作量庞大容易出错,需要花费大量时间。那有没有什么方法能自动解析文件并获取有用信息呢?
Golang 常见设计模式之选项模式
熟悉 Python 开发的同学都知道,Python 有默认参数的存在,使得我们在实例化一个对象的时候,可以根据需要来选择性的覆盖某些默认参数,以此来决定如何实例化对象。当一个对象有多个默认参数时,这个特性非常好用,能够优雅地简化代码。
而 Go 语言从语法上是不支持默认参数的,所以为了实现既能通过默认参数创建对象,又能通过传递自定义参数创建对象,我们就需要通过一些编程技巧来实现。对于这些程序开发中的常见问题,软件行业的先行者们总结了许多解决常见场景编码问题的最佳实践,这些最佳实践后来成为了我们所说的设计模式。其中选项模式在 Go 语言开发中会经常用到。
云原生灰度更新实践
相信在座的大家应该都听说过云原生了,这是近三四年一直热门的一个东西。什么是云原生呢?现在的云原生是个很宽泛的定义,可以简单理解为你的服务是为云而生,或者说因为现在云原生都是以 Kubernetes 容器技术作为基础设施,那只要你的服务运行在 Kubernetes 上,它们就可以算云原生。
而今天我跟大家分享的主题是 Luffy3 利用云原生技术,实现的灰度更新。
聊聊风口上的 eBPF
eBPF 是一个用于访问 Linux 内核服务和硬件的新技术,由于其灵活性和高性能等特点,被迅速用于网络、出错、跟踪以及防火墙等多场景。目前国内已有少数企业开始尝试将 eBPF 引入生产实践,又拍云也是其中一个。专为技术开发者提供知识分享的 Open Talk 公开课邀请了又拍云开发工程师周晨约直播分享 eBPF 的学习经验与开发心得,并对其分享内容进行整理,下拉至文末点击阅读原文可回看原视频。
重写数组的方法(改变原数组)
改变原数组的 6 种方法,你知道吗?
双十一,电商系统如何防止库存超卖
一年一度的双十一又开始了,各大 App 纷纷推出了购物优惠活动。除了常见的淘宝、拼多多、京东等 App,甚至银行、视频类 App 等等也加入了双十一这个战场,推出了秒杀之类的活动。在这些商品的活动页上,往往能够看到“剩余 XXX”的字样,这些其实就是商品的库存。而在秒杀过程中,如何防止商品超卖,也就是超低价货物售卖过量造成亏本,以及商品卖完发不出货的情况,就显得尤为重要。下面我们就来简单讲讲,电商系统中防止库存超卖的几种方法。
Python Type Hints 从入门到实践
Python 在 PEP 484 Python Enhancement Proposals,Python 增强建议书 中提出了 Type Hints(类型注解)。进一步强化了 Python 是一门强类型语言的特性,它在 Python3.5 中第一次被引入。使用 Type Hints 可以让我们编写出带有类型的 Python 代码,看起来更加符合强类型语言风格。
图灵互娱刘龙鑫:游戏出海运维经验分享
- 服务器部署地域的选择
- 网络和数据库规划
- DDOS 攻击紧急处理
- 服务器和数据监控
- 国内维护小妙招
性能优化:如何更快地接收数据
从网卡到应用程序,数据包会经过一系列组件,其中驱动做了什么?内核做了什么?为了优化,我们又能做些什么?整个过程中涉及到诸多细微可调的软硬件参数,并且相互影响,不存在一劳永逸的“银弹”。本文中又拍云系统开发高级工程师杨鹏将结合自己的的实践经验,介绍在深入理解底层机制的基础上如何做出“场景化”的最优配置。
MySQL 那些常见的错误设计规范
这些常见错误,你信过几个?