热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

后端架构师技术图谱(五)微服务

后端架构师技术图谱(五)-微服务,Go语言社区,Golang程序员人脉社

架构

  • 《Redis单线程架构》

回收策略

  • 《redis的回收策略》

Tair

  • 官方网站
  • 《Tair和Redis的对比》
  • 特点:可以配置备份节点数目,通过异步同步到备份节点
  • 一致性Hash算法。
  • 架构:和Hadoop 的设计思想类似,有Configserver,DataServer,Configserver 通过心跳来检测,Configserver也有主备关系。

几种存储引擎:

  • MDB,完全内存性,可以用来存储Session等数据。
  • Rdb(类似于Redis),轻量化,去除了aof之类的操作,支持Restfull操作
  • LDB(LevelDB存储引擎),持久化存储,LDB 作为rdb的持久化,google实现,比较高效,理论基础是LSM(Log-Structured-Merge Tree)算法,现在内存中修改数据,达到一定量时(和内存汇总的旧数据一同写入磁盘)再写入磁盘,存储更加高效,县比喻Hash算法。
  • Tair采用共享内存来存储数据,如果服务挂掉(非服务器),重启服务之后,数据亦然还在。

消息队列

  • 《消息队列-推/拉模式学习 & ActiveMQ及JMS学习》

    • RabbitMQ 消费者默认是推模式(也支持拉模式)。
    • Kafka 默认是拉模式。
    • Push方式:优点是可以尽可能快地将消息发送给消费者,缺点是如果消费者处理能力跟不上,消费者的缓冲区可能会溢出。
    • Pull方式:优点是消费端可以按处理能力进行拉去,缺点是会增加消息延迟。
  • 《Kafka、RabbitMQ、RocketMQ等消息中间件的对比 —— 消息发送性能和区别》

消息总线

消息总线相当于在消息队列之上做了一层封装,统一入口,统一管控、简化接入成本。

  • 《消息总线VS消息队列》

消息的顺序

  • 《如何保证消费者接收消息的顺序》

RabbitMQ

支持事务,推拉模式都是支持、适合需要可靠性消息传输的场景。

  • 《RabbitMQ的应用场景以及基本原理介绍》
  • 《消息队列之 RabbitMQ》
  • 《RabbitMQ之消息确认机制(事务+Confirm)》

RocketMQ

Java实现,推拉模式都是支持,吞吐量逊于Kafka。可以保证消息顺序。

  • 《RocketMQ 实战之快速入门》

ActiveMQ

纯Java实现,兼容JMS,可以内嵌于Java应用中。

  • 《ActiveMQ消息队列介绍》

Kafka

高吞吐量、采用拉模式。适合高IO场景,比如日志同步。

  • 官方网站
  • 《各消息队列对比,Kafka深度解析,众人推荐,精彩好文!》
  • 《Kafka分区机制介绍与示例》

Redis 消息推送

生产者、消费者模式完全是客户端行为,list 和 拉模式实现,阻塞等待采用 blpop 指令。

  • 《Redis学习笔记之十:Redis用作消息队列》

ZeroMQ

TODO

定时调度

单机定时调度

  • 《linux定时任务cron配置》

  • 《Linux cron运行原理》

    • fork 进程 + sleep 轮询
  • 《Quartz使用总结》

  • 《Quartz源码解析 ---- 触发器按时启动原理》

  • 《quartz原理揭秘和源码解读》

    • 定时调度在 QuartzSchedulerThread 代码中,while()无限循环,每次循环取出时间将到的trigger,触发对应的job,直到调度器线程被关闭。

分布式定时调度

  • 《这些优秀的国产分布式任务调度系统,你用过几个?》

    • opencron、LTS、XXL-JOB、Elastic-Job、Uncode-Schedule、Antares
  • 《Quartz任务调度的基本实现原理》

    • Quartz集群中,独立的Quartz节点并不与另一其的节点或是管理节点通信,而是通过相同的数据库表来感知到另一Quartz应用的

RPC

  • 《从零开始实现RPC框架 - RPC原理及实现》

    • 核心角色:Server: 暴露服务的服务提供方、Client: 调用远程服务的服务消费方、Registry: 服务注册与发现的注册中心。
  • 《分布式RPC框架性能大比拼 dubbo、motan、rpcx、gRPC、thrift的性能比较》

Dubbo

  • 官方网站
  • dubbo实现原理简单介绍

** SPI **
TODO

Thrift

  • 官方网站
  • 《Thrift RPC详解》
    • 支持多语言,通过中间语言定义接口。

gRPC

服务端可以认证加密,在外网环境下,可以保证数据安全。

  • 官方网站
  • 《你应该知道的RPC原理》

数据库中间件

Sharding Jdbc

  • 官网

日志系统

日志搜集

  • 《从零开始搭建一个ELKB日志收集系统》
  • 《用ELK搭建简单的日志收集分析系统》
  • 《日志收集系统-探究》

配置中心

  • Apollo - 携程开源的配置中心应用

    • Spring Boot 和 Spring Cloud
    • 支持推、拉模式更新配置
    • 支持多种语言
  • 《基于zookeeper实现统一配置管理》

  • 《 Spring Cloud Config 分布式配置中心使用教程》

servlet 3.0 异步特性可用于配置中心的客户端

  • 《servlet3.0 新特性——异步处理》

API 网关

主要职责:请求转发、安全认证、协议转换、容灾。

  • 《API网关那些儿》

  • 《谈API网关的背景、架构以及落地方案》

  • 《使用Zuul构建API Gateway》

  • 《HTTP API网关选择之一Kong介绍》

网络

协议

OSI 七层协议

  • 《OSI七层协议模型、TCP/IP四层模型学习笔记》

TCP/IP

  • 《深入浅出 TCP/IP 协议》
  • 《TCP协议中的三次握手和四次挥手》

HTTP

  • 《http协议详解(超详细)》

HTTP2.0

  • 《HTTP 2.0 原理详细分析》
  • 《HTTP2.0的基本单位为二进制帧》
    • 利用二进制帧负责传输。
    • 多路复用。

HTTPS

  • 《https原理通俗了解》

    • 使用非对称加密协商加密算法
    • 使用对称加密方式传输数据
    • 使用第三方机构签发的证书,来加密公钥,用于公钥的安全传输、防止被中间人串改。
  • 《八大免费SSL证书-给你的网站免费添加Https安全加密》

网络模型

  • 《web优化必须了解的原理之I/o的五种模型和web的三种工作模式》

    • 五种I/O模型:阻塞I/O,非阻塞I/O,I/O复用、事件(信号)驱动I/O、异步I/O,前四种I/O属于同步操作,I/O的第一阶段不同、第二阶段相同,最后的一种则属于异步操作。
    • 三种 Web Server 工作方式:Prefork(多进程)、Worker方式(线程方式)、Event方式。
  • 《select、poll、epoll之间的区别总结》

    • select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的。
    • select 有打开文件描述符数量限制,默认1024(2048 for x64),100万并发,就要用1000个进程、切换开销大;poll采用链表结构,没有数量限制。
    • select,poll “醒着”的时候要遍历整个fd集合,而epoll在“醒着”的时候只要判断一下就绪链表是否为空就行了,通过回调机制节省大量CPU时间;select,poll每次调用都要把fd集合从用户态往内核态拷贝一次,而epoll只要一次拷贝。
    • poll会随着并发增加,性能逐渐下降,epoll采用红黑树结构,性能稳定,不会随着连接数增加而降低。
  • 《select,poll,epoll比较 》

    • 在连接数少并且连接都十分活跃的情况下,select和poll的性能可能比epoll好,毕竟epoll的通知机制需要很多函数回调。
  • 《深入理解Java NIO》

    • NIO 是一种同步非阻塞的 IO 模型。同步是指线程不断轮询 IO 事件是否就绪,非阻塞是指线程在等待 IO 的时候,可以同时做其他任务
  • 《BIO与NIO、AIO的区别》

  • 《两种高效的服务器设计模型:Reactor和Proactor模型》

Epoll

  • 《epoll使用详解(精髓)》

Java NIO

  • 《深入理解Java NIO》
  • 《Java NIO编写Socket服务器的一个例子》

kqueue

  • 《kqueue用法简介》

连接和短连接

  • 《TCP/IP系列——长连接与短连接的区别》

框架

  • 《Netty原理剖析》
    • Reactor 模式介绍。
    • Netty 是 Reactor 模式的一种实现。

零拷贝(Zero-copy)

  • 《对于 Netty ByteBuf 的零拷贝(Zero Copy) 的理解》
    • 多个物理分离的buffer,通过逻辑上合并成为一个,从而避免了数据在内存之间的拷贝。

序列化(二进制协议)

Hessian

  • 《Hessian原理分析》
    Binary-RPC;不仅仅是序列化

Protobuf

  • 《Protobuf协议的Java应用例子》
    Goolge出品、占用空间和效率完胜其他序列化类库,如Hessian;需要编写 .proto 文件。

  • 《Protocol Buffers序列化协议及应用》

    • 关于协议的解释;缺点:可读性差;
  • 《简单的使用 protobuf 和 protostuff》

    • protostuff 的好处是不用写 .proto 文件,Java 对象直接就可以序列化。
数据库

基础理论

数据库设计的三大范式

  • 《数据库的三大范式以及五大约束》
    • 第一范式:数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性;
    • 第二范式(2NF):满足1NF后,要求表中的所有列,都必须依赖于主键,而不能有任何一列与主键没有关系,也就是说一个表只描述一件事情;
    • 第三范式:必须先满足第二范式(2NF),要求:表中的每一列只与主键直接相关而不是间接相关,(表中的每一列只能依赖于主键);

MySQL

原理

  • 《MySQL的InnoDB索引原理详解》

  • 《MySQL存储引擎--MyISAM与InnoDB区别》

    • 两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁
  • 《myisam和innodb索引实现的不同》

InnoDB

  • 《一篇文章带你读懂Mysql和InnoDB》

优化

  • 《MySQL36条军规》

  • 《MYSQL性能优化的最佳20+条经验》

  • 《SQL优化之道》

  • 《mysql数据库死锁的产生原因及解决办法》

  • 《导致索引失效的可能情况》

  • 《 MYSQL分页limit速度太慢优化方法》

    • 原则上就是缩小扫描范围。

索引

聚集索引, 非聚集索引

  • 《MySQL 聚集索引/非聚集索引简述》
  • 《MyISAM和InnoDB的索引实现》

MyISAM 是非聚集,InnoDB 是聚集

复合索引

  • 《复合索引的优点和注意事项》

自适应哈希索引(AHI)

  • 《InnoDB存储引擎——自适应哈希索引》

explain

  • 《MySQL 性能优化神器 Explain 使用分析》

NoSQL

MongoDB

  • MongoDB 教程
  • 《Mongodb相对于关系型数据库的优缺点》
    • 优点:弱一致性(最终一致),更能保证用户的访问速度;内置GridFS,支持大容量的存储;Schema-less 数据库,不用预先定义结构;内置Sharding;相比于其他NoSQL,第三方支持丰富;性能优越;
    • 缺点:mongodb不支持事务操作;mongodb占用空间过大;MongoDB没有如MySQL那样成熟的维护工具,这对于开发和IT运营都是个值得注意的地方;

Hbase

  • 《简明 HBase 入门教程(开篇)》

  • 《深入学习HBase架构原理》

  • 《传统的行存储和(HBase)列存储的区别》

  • 《Hbase与传统数据库的区别》

    • 空数据不存储,节省空间,且适用于并发。
  • 《HBase Rowkey设计》

    • rowkey 按照字典顺序排列,便于批量扫描。
    • 通过散列可以避免热点。
搜索引擎

搜索引擎原理

  • 《倒排索引--搜索引擎入门》

Lucene

  • 《Lucene入门简介》

Elasticsearch

  • 《Elasticsearch学习,请先看这一篇!》
  • 《Elasticsearch索引原理》

Solr

  • 《 Apache Solr入门教程》
  • 《elasticsearch与solr比较》

sphinx

  • 《Sphinx 的介绍和原理探索》
性能

性能优化方法论

  • 《15天的性能优化工作,5方面的调优经验》

    • 代码层面、业务层面、数据库层面、服务器层面、前端优化。
  • 《系统性能优化的几个方面》

容量评估

  • 《联网性能与容量评估的方法论和典型案例》
  • 《互联网架构,如何进行容量设计?》
    • 评估总访问量、评估平均访问量QPS、评估高峰QPS、评估系统、单机极限QPS

CDN 网络

  • 《CDN加速原理》
  • 《国内有哪些比较好的 CDN?》

连接池

  • 《主流Java数据库连接池比较与开发配置实战》

性能调优

  • 《九大Java性能调试工具,必备至少一款》

推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 一次上线事故,30岁+的程序员踩坑经验之谈
    本文主要介绍了一位30岁+的程序员在一次上线事故中踩坑的经验之谈。文章提到了在双十一活动期间,作为一个在线医疗项目,他们进行了优惠折扣活动的升级改造。然而,在上线前的最后一天,由于大量数据请求,导致部分接口出现问题。作者通过部署两台opentsdb来解决问题,但读数据的opentsdb仍然经常假死。作者只能查询最近24小时的数据。这次事故给他带来了很多教训和经验。 ... [详细]
  • DockerDataCenter系列(四)-离线安装UCP和DTR,Go语言社区,Golang程序员人脉社 ... [详细]
  • 说出来你可能不信,我用三天做了一个完整的项目
    Java在人工智能中能起到什么作用?作为编程语言中的扛把子,Java20多年稳定不倒,就在于它的稳定性,维护成本极低。这使得 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • 熟练掌握Spring Cloud,终于成为Java工程师的面试门槛 ... [详细]
  • 有意向可以发简历到邮箱内推.简历直达组内Leader.能做同事的话,内推奖励全给你. ... [详细]
  • Maven构建Hadoop,
    Maven构建Hadoop工程阅读目录序Maven安装构建示例下载系列索引 序  上一篇,我们编写了第一个MapReduce,并且成功的运行了Job,Hadoop1.x是通过ant ... [详细]
  • 什么是大数据lambda架构
    一、什么是Lambda架构Lambda架构由Storm的作者[NathanMarz]提出,根据维基百科的定义,Lambda架构的设计是为了在处理大规模数 ... [详细]
  • 后台自动化测试与持续部署实践
    后台自动化测试与持续部署实践https:mp.weixin.qq.comslqwGUCKZM0AvEw_xh-7BDA后台自动化测试与持续部署实践原创 腾讯程序员 腾讯技术工程 2 ... [详细]
  • 提供:ZStack云计算原创2016-12-26张鑫讲师介绍张鑫ZStack总架构师、联合创始人《系统虚拟化》主要作者,曾任职Intel开源软件技术中心 ... [详细]
author-avatar
手机用户2502895517
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有