09 2019 档案
摘要:OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台。我们知道开发 Nginx 的模块需要用 C 语言,同时还要熟悉它的源码,成本和门槛比较高。国人章亦春把 LuaJIT VM 嵌入到了 Nginx 中,使得可以直接通过 Lua 脚本在 Nginx 上进行编程,同时还提供了大量的类库(如:lua-resty-mysql lua-resty-redis 等),直接把一个 Nginx 这个 Web Server 扩展成了一个 Web 框架,借助于 Nginx 的高性能,能够快速地构造出一个足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系
阅读全文
摘要:Lua脚本是一个很轻量级的脚本,也是号称性能最高的脚本,用在很多需要性能的地方,比如:游戏脚本,nginx,wireshark的脚本
它主要的使用场景主要是:
在 Lua 中揉和和处理各种不同的 nginx 上游输出(Proxy,Postgres,Redis,Memcached 等)
在请求真正到达上游服务之前,Lua 可以随心所欲的做复杂的访问控制和安全检测
随心所欲的操控响应头里面的信息
从外部存储服务(比如 Redis,Memcached,MySQL,Postgres)中获取后端信息,并用这些信息来实时选择哪一个后端来完成业务访问
阅读全文
摘要:很早之前在面试一个大厂职位的时候 有面试官提问 相信你一定用过redis,那么你肯定知道redis是基于内存的 那如果redis用满了 继续往里面添加数据 redis是怎么对待的 会出现问题?小伙伴如果没准备 估计会一脸懵逼.这篇文章是回答这个问题的答案...
阅读全文
摘要:AOP(Aspect Orient Programming),我们一般称为面向方面(切面)编程,作为面向对象的一种补充,用于处理系统中分布于各个模块的横切关注点,比如事务管理、日志、缓存等等。AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ;而动态代理则以Spring AOP为代表。本文会分别对AspectJ和Spring AOP的实现进行分析和介绍。
阅读全文
摘要:根据云栖社区《2017中国开发者调查报告》我们可以了解到在全球范围内特别是国内 MySQL 都有着非常高的使用率,有大量的产品和项目是依赖于 MySQL 作为关系型数据库的,因此在 MySQL 上进行进一步的优化和改造是大有可为的,于是便有了 MySQL 的衍生版包括有:MariaDB、Percona、AliSQL、PhxSQL 等等,但 MySQL 本身其实是一款“轻量级”数据库,相较 SQL Server 和 Oracle 等商业数据库其实是有所不足的。因此各类兼容 MySQL 生态的新型数据库开始出现。
2017年是各类新型数据库的落地年,各种NewSQL纷纷结束蛰伏期并开始商业化输出,特别是各类基于 MySQL 生态和兼容 MySQL 协议的新数据库产品也开始不断发展并开始商业输出,有包括在 OLTP 上进一步优化的 POLARDB、Aurora、X-DB等等,还有兼容 OLTP 和 OLAP 场景的 HTAP 上优化的 HybridDB、TiDB、BaikalDB 等等。
本文要将的主角是 —— POLARDB ,POLARDB 是在2017年9月发布并进入公测阶
阅读全文
摘要:TiDB 是 PingCAP 公司设计的开源分布式 HTAP (Hybrid Transactional and Analytical Processing) 数据库,结合了传统的 RDBMS 和 NoSQL 的最佳特性。TiDB 兼容 MySQL,支持无限的水平扩展,具备强一致性和高可用性。TiDB 的目标是为 OLTP (Online Transactional Processing) 和 OLAP (Online Analytical Processing) 场景提供一站式的解决方案。
TiDB 具备如下特性:
高度兼容 MySQL
大多数情况下,无需修改代码即可从 MySQL 轻松迁移至 TiDB,分库分表后的 MySQL 集群亦可通过 TiDB 工具进行实时迁移。
水平弹性扩展
通过简单地增加新节点即可实现 TiDB 的水平扩展,按需扩展吞吐或存储,轻松应对高并发、海量数据场景。
分布式事务
TiDB 100% 支持标准的 ACID 事务。
真正金融级高可用
相比于传统主从 (M-S) 复制方案,基于 Raft 的多数派选
阅读全文
摘要:Leaf是美团基础研发平台推出的一个分布式ID生成服务,名字取自德国哲学家、数学家莱布尼茨的一句话:“There are no two identical leaves in the world.”Leaf具备高可靠、低延迟、全局唯一等特点。目前已经广泛应用于美团金融、美团外卖、美团酒旅等多个部门。具体的技术细节,可参考此前美团技术博客的一篇文章:《Leaf美团分布式ID生成服务》。近日,Leaf项目已经在Github上开源:https://github.com/Meituan-Dianping/Leaf,希望能和更多的技术同行一起交流、共建。
阅读全文
摘要:在美团,基于 MySQL 构建的传统关系型数据库服务已经难于支撑公司业务的爆发式增长,促使我们去探索更合理的数据存储方案和实践新的运维方式。随着近一两年来分布式数据库大放异彩,美团 DBA 团队联合架构存储团队,于 2018 年初启动了分布式数据库项目。
阅读全文
摘要:桥梁模式是为了解决将抽象部分与实现部分分离,好让他们都在自己的维度上有多维度地变化。
阅读全文
摘要:每个业务都会需要鉴权、限流、权限校验等逻辑,如果每个业务都各自为战,自己造轮子实现一遍,会很蛋疼,完全可以抽出来,放到一个统一的地方去做。
如果业务量比较简单的话,这种方式前期不会有什么问题,但随着业务越来越复杂,比如淘宝、亚马逊打开一个页面可能会涉及到数百个微服务协同工作,如果每一个微服务都分配一个域名的话,一方面客户端代码会很难维护,涉及到数百个域名,另一方面是连接数的瓶颈,想象一下你打开一个APP,通过抓包发现涉及到了数百个远程调用,这在移动端下会显得非常低效。
每上线一个新的服务,都需要运维参与,申请域名、配置Nginx等,当上线、下线服务器时,同样也需要运维参与,另外采用域名这种方式,对于环境的隔离也不太友好,调用者需要自己根据域名自己进行判断。
另外还有一个问题,后端每个微服务可能是由不同语言编写的、采用了不同的协议,比如HTTP、Dubbo、GRPC等,但是你不可能要求客户端去适配这么多种协议,这是一项非常有挑战的工作,项目会变的非常复杂且很难维护。
后期如果需要对微服务进行重构的话,也会变的非常麻烦,需要客户端配合你一起进行改造,比如商品服务,随
阅读全文
摘要:常用缓存策略 常用的缓存淘汰策略有以下 先进先出算法(FIFO) Least Frequently Used(LFU)淘汰一定时期内被访问次数最少的页面,以次数作为参考 Least Recently Used(LRU)淘汰最长时间未被使用的页面,以时间作为参考 这些算法在不同层次的缓存上执行时拥有不
阅读全文
摘要:独占锁、共享锁、更新锁,乐观锁、悲观锁
阅读全文