关注分布式系统及高可用架构,探讨职业规划,实践持续学习,公众号「越哥聊IT」
能力说明:
熟悉微服务常用开放框架,理解Spring、Spring Boot,以及Spring Cloud的概念和不同,对Spring Cloud Alibaba有较为全面的认知。对Istio具备基础运维能力,掌握基本组件的知识。
阿里云技能认证
详细说明从MySQL 8.0开始,设计了一套无锁的写log机制,其核心思路是引入recent_written,允许不同的mtr,同时并发地写Log Buffer的不同位置。
结合DDD和阿里业务中台建设经验,沉淀复杂业务系统的开发和架构思路
并查集顾名思义就是有“合并集合”和“查找集合中的元素”两种操作的关于数据结构的一种算法。 算法 用集合中的某个元素来代表这个集合,该元素称为集合的代表元。一个集合内的所有元素组织成以代表元为根的树形结构。
数据库查询是数据库的最主要功能之一,我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化,这篇文章对索引做一个系统的梳理,希望对大家有帮助。
这篇文章分为六个部分,不同特性的锁分类,并发锁的不同设计,Synchronized中的锁升级,ReentrantLock和ReadWriteLock的应用,帮助你梳理 Java 并发锁及相关的操作。
Dubbo是一个远程调用的框架,对于一个服务提供者,暴露了一个接口供外部消费者调用,那么对于提供者自己是否可以调用这个接口,需要什么特殊处理吗?
@SentinelResource可以说是Sentinel学习的突破口,搞懂了这个注解的应用,基本上就搞清楚了 Sentinel 的大部分应用场景。
Sentinel 的使用可以分为核心库和控制台两个部分。控制台Dashboard提供了可视化的管理限流规则、对集群进行监控,集群限流分配管理、机器发现等功能。
2018年8月,阿里巴巴宣布将 Sentinel 进行开源,同时推出了结合Dubbo的适配器,捐赠给了Apache Dubbo社区。
Spring Cloud Alibaba Nacos 在 1.0.0 正式支持 AP 和 CP 两种一致性协议,其中的CP一致性协议实现,是基于简化的 Raft 的 CP 一致性。
在阿里云 ECS上 部署了一套 Lamp 系统,建了WordPress的网站,把操作过程记录下来,划重点,文中所列脚本可以直接应用!
服务注册与发现主要用于实现各个微服务实例的自动化注册与发现,是微服务治理的核心,学习 Spring Cloud Alibaba,首先要了解框架中的服务注册和发现组件—Nacos
本文为新手向教程,帮助大家快速入门 Spring Cloud 开发,也作为「跟我学 Spring Cloud Alibaba」系列的补充文章
本篇是「跟我学 Spring Cloud Alibaba」系列的第一篇,每期文章会在公众号「架构进化论」进行首发更新,欢迎关注。
程序员书单会做成一个系列,会推荐面试,职业规划,软技能等不同主题的书单,同时我会在博客和公众号「架构进化论」中,对书单中推荐的好书做解读,欢迎持续关注。
Dubbo工程是一个Maven多Module的项目,以包结构来组织各个模块。
Kafka的消息是保存或缓存在磁盘上的,一般认为在磁盘上读写数据是会降低性能的,因为寻址会比较消耗时间,但是实际上,Kafka的特性之一就是高吞吐率。 即使是普通的服务器,Kafka也可以轻松支持每秒百万级的写入请求,超过了大部分的消息中间件,这种特性也使得Kafka在日志处理等海量数据场景广泛应用。
Raft 适用于一个管理日志一致性的协议,相比于 Paxos 协议 Raft 更易于理解和去实现它。 为了提高理解性,Raft 将一致性算法分为了几个部分,包括领导选取、日志复制、安全性,并且使用了更强的一致性来减少了必须需要考虑的状态。
区块链首先是一个大规模分布式系统,共识问题本质就是分布式系统的一致性问题,但是又有很大的不同。 工程开发中,认为系统中存在故障(fault),但不存在恶意(corrupt)节点,而区块链,特别是公开链是落地到物理世界中,涉及到人性和利益关系,不可避免的存在信任以及恶意攻击问题。
比特币的区块数据里包含了比特币链上的核心信息,包括比特币如何交易,区块扩容等问题。 比特币从诞生到现在,每10分钟诞生一个区块,访问 https://blockchain.info/ 查看最近的区块信息,可以看到当前的区块大小已经是中本聪设置的1MB容量。
TFS是淘宝开源的一套高性能文件存储系统,在阿里广泛应用,除了自建文件系统,在应用上云的大趋势下,还可以使用阿里云的对象存储OSS服务。
埋头赶路的同时,也要抬头看天,在开发的道路上工作越久,很容易把自己变窄。给希望提升自己的工程师们推荐十本书,有些书可能并不是讨论具体的技术,但是背后的思想和观点对工作以及生活都会有很大的启发。
当有效输入积累的足够多,会越来越渴望去表达,写作是表达的途径,却又不止于此。一个良好的学习状态,是输入和输出的动态平衡,通过高效输入,达到有价值的输出。
规则引擎具体执行可以分为接受数据输入,解释业务规则,根据业务规则做出业务决策几个过程。 使用规则引擎可以把复杂、冗余的业务规则同整个支撑系统分离开,做到架构的可复用移植。
收集和分析日志是应用开发中至关重要的一环,互联网大规模、分布式的特性决定了日志的源头越来越分散,产生的速度越来越快。在规模化场景下,grep、awk 无法快速发挥作用,我们需要一种高效、灵活的日志分析方式,可以给故障处理,问题定位提供更好的支持。
在开发中应用过ActiveMQ,kafka等mq,不过对消息队列背后的实现原理关注不多,其实了解消息队列背后的实现特别重要,比如对一致性等实现的关注,可以帮助我们在开发中避免踩坑,规避问题的出现。这篇文章简单探讨下当设计和实现一个消息队列时,我们需要关心哪些地方。
Go 语言一个很大的优势就是可以方便地编写并发程序。Go 语言内置了 goroutine 机制,使用goroutine可以快速地开发并发程序,Go语言的并发机制有很多值得探讨的,比如Go语言和Scala并发实现的不同,Golang CSP 和Actor模型的对比等,了解并发机制的这些实现,可以帮助我们更好的进行并发程序的开发,实现性能的最优化。
善医者“未有形而除之”,提高工程健壮性最好的方式是在代码出现问题之前就排除掉,不给Bug出现的机会。一份好的开发规范就可以起到这样的作用,大大减少产品上线后的问题。《阿里巴巴Java开发手册》是阿里巴巴的内部编码规范,阿里官方的Java代码规范标准,这份开发手册不仅规范了一些开发细节,也提出了很多工程开发的哲学,值得好好阅读。
Github Pages可以创建免费的静态站点,支持自带主题、支持自制页面等,并且可以使用Jekyll或者Hexo等静态博客框架进行管理。 独立博客是博客园等博客平台之外的一个良好补充,相比使用虚拟主机或者云服务器搭建站点,静态博客管理和使用简洁,使用Github Pages搭建博客不失为一个好选择。
数据库擅长存储与索引,在目前的互联网系统架构中,服务器的扩展要比存储的扩展更简单, 需要考虑系统可能的瓶颈在服务器还是数据存储,存储过程有它的优点,应该在开发中合理的选用。
Spring等框架支持对事务的管理,可以更好的实现存储和业务逻辑的分离,不过代码或者框架层面的事务管理,最终还是落实到数据库上,存储过程作为一组预编译的SQL语句,性能会优于代码层面的多次SQL操作。在一些复杂的业务场景,或者对性能要求比较高的垂直业务上,可以适当的直接操作数据库。
这个春节最大的感慨是时间过的越来越快,转眼一年就过去了,在这里回顾和总结2016年的工作,分享自己的感悟,展望新年,开工大吉!
应用Git Flow的目的是更好的进行版本管理和持续集成,有些细节并不一定要遵循这个模型,可以根据团队规模进行简单的调整,适合的才是最好的。
性能测试在大型网站系统的设计和开发中非常重要,通常会和容量预估等工作结合在一起,穿插在系统开发的不同方案。性能测试可以帮助我们及时发现系统的性能短板,评估系统的能力,在这个基础在上再进行针对性的性能优化。
类似基于投票的热门计数算法普遍应用在热门文章,热门评论等场景中, 典型的比如网易和今日头条的评论区,国外比如Hacker News和Reddit的主题排序。
分析优秀的产品团队运作的工作方法和程序,详细介绍产品经理应该如何分析用户需求,如何通过制作流程图、制作产品原型、撰写BRD、撰写PRD 等方法,将抽象的产品需求具体化,以及如何做好项目管理,推动产品需求的快速实施。
高可用性即HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所导致的停机时间,以提高系统和应用的可用性。
基于Token的身份验证是无状态的,不将用户信息存在服务器或Session中, 相比原始的Cookie+Session方式,更适合分布式系统的用户认证,绕开了传统的分布式Session一致性等问题,可以采用标准化的 JSON Web Token (JWT),对以后系统接入Node等纯前端开发更便捷
随着分布式服务架构的流行,特别是微服务等设计理念在系统中的应用,业务的调用链越来越复杂,一个请求可能会涉及到几十个服务的协同处理, 牵扯到多个团队的业务系统,那么如何快速准确的定位到线上故障?缺乏一个自上而下全局的调用id,如何有效的进行相关的数据分析工作?
dubbo启动时默认有重试机制和超时机制。 超时机制的规则是如果在一定的时间内,provider没有返回,则认为本次调用失败, 重试机制在出现调用失败时,会再次调用。如果在配置的调用次数内都失败,则认为此次请求异常,抛出异常。