自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(58)
  • 收藏
  • 关注

原创 颠覆性新工具:瞬间生成相似图片!

如果有这样的工具就太方便了。比如你是一名设计师,给客户设计了一张图,如果能快速生成几张类似的图片,是不是就给客户提供了更大的选择空间。再比如你平时写文章、做 PPT,需要用到配图,使用网上的图片会有什么问题?可不可以用这个工具呢?可以发挥自己想象力。发布了这项功能。

2023-05-29 15:32:11 700

原创 有翻译软件了,还有必要用 ChatGPT 做翻译吗?

今天看一篇英文文章时,有几句话不太理解,就用 Google 翻译和 ChatGPT 做了一下对比,发现 ChatGPT 真的更牛。

2023-05-23 18:51:32 730 1

原创 图解 Elestricsearch 写入流程

整体上看,Client 向 ES 发送写请求,es 接收数据,写入磁盘文件,返回响应给 Client 写入成功,这样就完成了。然后拉近看一下,看看内部都做了什么工作。2. ES 整体结构ES 集群里面有多个 Server 节点,一个 ES Index 有多个 shard 分片,每个 shard 有多个副本。其中有一个 primary 主副本,负责写入,其他副本为 replica,不能写,只能同步 primary 的数据,但可以处理读请求。ES 收到写请求后,会将请求路由到目标 shard 的.

2021-05-18 10:00:20 385

原创 消息队列产生严重消息堆积怎么处理?

1. 为什么产生消息堆积?大多是因为 Consumer 出问题了,没有及时发现,或者故障恢复需要较长的时间,导致大量消息积压在 MQ 中。2. 消息堆积会有什么后果呢?2.1 消息被丢弃例如 RabbitMQ 有一个消息过期时间 TTL,过期的消息会被扔掉,这样消息就彻底没有了。2.2 磁盘满了如果堆积量太大,可能导致磁盘空间不足,那么新消息就进不来了。2.3 海量消息待处理如果消息没过期,并且磁盘空间也够用,那么就是产生海量消息等待被消费,Consumer 的噩梦。3. 如何应对呢?3

2021-05-17 09:22:28 6002 3

原创 消息队列如何确保消息的有序性?

要想实现消息有序,需要从 Producer 和 Consumer 两方面来考虑。首先,Producer 生产消息的时候就必须要有序。然后,Consumer 消费的时候,也要按顺序来,不能乱。Producer 有序像 RabbitMQ 这类普通的消息系统,队列结构简单,Producer 向队列中发送消息就完了,进入队列的消息肯定是有序的。Kafka 比较特殊,因为它的一个 Topic(就是队列的概念)实际上分为了多个 Partition。Producer 发送消息的时候,是分散在不同 Part

2021-05-15 09:34:58 1058 3

原创 架构模式 CQRS

本文我们聊聊 CQRS 这种架构模式。CQRS 是用来解决什么问题的?我们先看一个场景。系统中的数据模型是按照实体以及关系进行设计的是吧。例如电商系统,包含订单、用户、商品等等数据。数据的变更操作、查询操作,都是基于这一套数据模型的。但是,实际场景下的查询需求是多种多样。例如这3类人群:商家买家用户电商运营人员他们的数据视角是不同的,各自的关注角度不同,需要查询的数据就完全不同。但数据模型是一套啊,怎么办?是不是就需要做数据关联、构建临时数据集合等等复杂的操作啊。

2021-05-14 08:55:52 282

原创 消息队列把消息弄丢了怎么办?

消息队列会丢失消息吗?答案是肯定的,所以对于业务严谨的数据,我们要确保其在消息队列中的安全,不能丢。要想解决不丢的问题,首先要弄清楚 消息是怎么丢的呢?丢消息的关键点有3个:Producer 发送消息的过程消息队列的消息存储Consumer 消费消息的过程下面挨个看看都是怎么丢的,以及解决方案。会以 RabbitMQ 和 Kafka 这两个常用的消息系统来说明。1. Producer 弄丢消息Producer 向 MQ 发消息,很简单,发过去就完事儿了。但是,在发送图中是存在危险的

2021-05-13 09:36:36 252

原创 3 个主流 Java 微服务框架

本文我们简单聊聊当下主流的 3 个 Java 微服务框架,看看各自的特点。1. Spring and Spring BootSpring Boot 在 Java 微服务领域绝对是一哥,毫无争议,据说已经占据 57% 的市场份额。Spring Boot 这么牛是有道理的,它太成熟了,功能特性极其丰富,不管你的需求多复杂,都能满足你。还内置了各种通用的功能,例如安全认证等等,开箱即用,非常方便。SpringBoot 配置优先的理念大大简化了开发,通过自动配置可以非常简单的集成各种技术。Sprin.

2021-05-11 10:24:23 1155

原创 RabbitMQ、Kafka、RocketMQ 是如何实现高可用的?

本文从高可用的角度观察一下 RabbitMQ、Kafka、RocketMQ,看看它们各自的实现思路。1. RabbitMQRabbitMQ 有 3 种部署模式:单机模式普通集群模式镜像集群模式单机模式与高可用完全没关系,咱就不说了,直接看看这2种集群模式。1.1 普通集群模式某一个 Queue 是在集群中的某一个 Broker 上,各个 Broker 会同步元数据,但不会同步 Queue 的消息数据。如果某一个 Broker 故障了,其中的 Queue 便无法使用。如果消息没有配置消

2021-05-10 12:12:13 238

原创 微服务设计原则

良好的微服务设计可以使后期的升级维护更加轻松,否则将会令人非常头疼。下面几个设计原则强烈建议采用:单一职责高内聚低耦合隐藏内部实现避免代码库共享避免数据过度暴露避免数据库共享最小化同步调用最小化硬件共享避免使用平台独特性技术这三大原则是面向对象设计中的核心,同样适用于微服务设计。1. 单一职责每个微服务只应担负一个职责。比如一个微服务中有两大功能:商品分类管理购物车把它们放在一起看起来问题不大,因为使用的技术相同、功能和数据上会有比较紧密的联系,在组.

2021-05-08 09:19:30 383

原创 细说 Kafka Partition 分区

Partition(分区)是 Kafka 的核心角色,对于 Kafka 的存储结构、消息的生产消费方式都至关重要。掌握好 Partition 就可以更快的理解 Kafka。本文会讲解 Partition 的概念、结构,以及行为方式。一、Events, Streams, Topics在深入 Partition 之前,我们先看几个更高层次的概念,以及它们与 Partition 的联系。Event(事件)代表过去发生的一个事实。简单理解就是一条消息、一条记录。Event 是不可变的,但是很活跃,经常从一

2021-05-07 09:31:26 17586 9

原创 Kafka 不再需要 ZooKeeper

Kafka 2.8.0 出炉了,此版本有一项重大改进:实现了 Raft 分布式一致性机制,意味着可以脱离 ZooKeeper 独立运行了。ZooKeeper 在 Kafka 中扮演着重要的角色,用来存储 Kafka 的元数据。ZooKeeper 存储着 Partition 和 Broker 的元数据 ,同时也负责 Kafka Controller 的选举工作。对于 Kafka 来讲,ZooKeeper 是一套外部系统,要想部署一套 Kafka 集群,就要同时部署、管理、监控 ZooKeeper.

2021-05-06 09:43:12 4094

原创 图解 Kafka

Kafka 是主流的消息流系统,其中的概念还是比较多的,下面通过图示的方式来梳理一下 Kafka 的核心概念,以便在我们的头脑中有一个清晰的认识。基础Kafka 是一套流处理系统,可以让后端服务轻松的相互沟通,是微服务架构中常用的组件。生产者消费者生产者服务 Producer 向 Kafka 发送消息,消费者服务 Consumer 监听 Kafka 接收消息。一个服务可以同时为生产者和消费者。Topics 主题Topic 是生产者发送消息的目标地址,是消费者的监听目标。一个服务可以监

2021-05-02 19:12:30 1308 7

原创 MySQL 8 查询优化新工具 Explain Analyze

1. Explain Analyze 介绍Explain 是我们常用的查询分析工具,可以对查询语句的执行方式进行评估,给出很多有用的线索。但他仅仅是评估,不是实际的执行情况,比如结果中的 rows,可能和实际结果相差甚大。Explain Analyze 是 MySQL 8 中提供的新工具,牛X之处在于可以给出实际执行情况。Explain Analyze 是一个查询性能分析工具,可以详细的显示出 查询语句执行过程中,都在哪儿花费了多少时间。Explain Analyze 会做出查询计划,并且会实际执

2020-07-03 10:07:50 616

原创 4 个好用的 Linux 监控工具

下面是 Linux 下 4 个日常使用率非常高的监控工具,可以帮助我们准确快速的诊断系统问题。1. iotop如果你想知道某些进程使用了多少你宝贵的 I/O 资源,那么就使用 iotop 吧。iostat 命令也是查看 I/O 状态的,但他监控的是系统级别的 I/O 情况,而 iotop 监控的是进程级别的,可以监控到哪一个进程使用的 I/O 信息。2. htophtop 是传统 top 的增强版,具有更好的视觉效果,更容易理解当前系统的状况。可以清楚看到 CPU 每个核儿的使用状况,不像.

2020-07-02 10:03:05 272

原创 8个你会爱上的 VS Code 扩展

这个列表中的 Visual Studio Code 扩展会让你更轻松和高效。Better Comments这个扩展可以让你写出不同类型的注释,包括:AlertsQueriesTo-dosHighlights地址:https://marketplace.visualstudio.com/items?itemName=aaron-bond.better-commentsBracket Pair Colorizer 2这个扩展可以给代码中的花括号 “{ }” 加颜色,这样就很容易看出前.

2020-06-22 09:37:54 386

原创 SpringBoot 构建 Docker 镜像的 3 种方式

本文将介绍3种技术,通过 Maven 把 SpringBoot 应用构建成 Docker 镜像。(1)使用 spring-boot-maven-plugin 内置的 build-image.(2)使用 Google 的 jib-maven-plugin。(3)使用 dockerfle-maven-plugin。Spring Boot 应用为了方便实践,需要一个 Spring Boot 项目。Demo 项目地址:https://github.com/davelms/medium-article.

2020-06-18 09:11:49 1596

原创 OAuth2 图解

本文简单的描述出了 OAuth2 工作背景,看完后可以轻松理解 OAuth2 是用来解决什么问题的。1. 用户有自己的数据2. 有一个服务器,负责管理用户的数据。这个服务器被称为”Resource Server(资源服务器)“3. 有一个客户端应用,想要使用用户的数据4. 资源服务器需要准备一个 API 接口,用来传递用户的数据5. 客户端应用请求 API 接口,想要用户的数据6. 资源服务器返回用户数据7. 如果某个客户端应用心术不正怎么办?8. 坏客户端应用也请求资源服务器

2020-06-11 11:09:42 4851 10

原创 Prometheus + Grafana 监控 SpringBoot

整体结构SpringBoot 的 actuator 提供了监控端点。Prometheus 是监控系统,可以从 Springboot 获取监控数据,以时序数据的形式存储,并提供了监控数据的查询服务。Grafana 是专业的 UI 仪表盘系统,支持非常多的数据源,其中就包括 Prometheus,可以便利的从中获取数据,使用仪表盘展示出来。springboot 2 中引入了 micromete...

2020-02-10 14:07:09 740

原创 Git 工作流程

版本控制几乎是所有开发项目的必备,Git是目前主流的版本控制系统,下面介绍几种常用的工作流程。目录:最简模式特征分支开发分支开发 + 特性分支发布分支1. 最简模式这是最简单的工作流模式,只使用master分支。这种方式只适合于非常小的项目,例如个人项目。当团队增长后,这种方式会极其混乱,产生大量的代码冲突。2. Feature 特征分支在上种方式上添加了 feat...

2020-02-09 10:13:45 151

原创 认识一下 RabbitMQ

分布式系统中,如何在各个应用之间高效的进行通信,是系统设计中的一个关键。使用 消息代理(message broker) 是一个优雅的解决方案。RabbitMQ 就是一个被广泛应用的消息代理,遵循 AMQP协议。接下来我们就了解一下:Message Broker 概念AMQP 协议的核心构成消息转发的 4 种模式1. Message Brokerbroker 是经纪人的意思,...

2020-01-22 08:42:19 903

原创 ElasticSearch 倒排索引简析

内容概要倒排索引是什么?为什么需要倒排索引?倒排索引是怎么工作的?1. 倒排索引是什么?假设有一个交友网站,信息表如下:美女1:“我要找在上海做 PHP 的哥哥。”需要匹配 性别、城市、语言列。美女2:“我要找北京的爱旅游、爱美食的 JAVA 哥哥。”更复杂了是吧,实际场景中,会有更复杂的排列组合。对于这类的搜索,关系型数据库的索引就很难应付了,适合使用全文搜索的倒排索引...

2020-01-20 09:29:04 213

原创 Elasticsearch 开箱指南

内容概要ES 基础介绍,重点是其中的核心概念。 基础 API 实践操作。1. 基础介绍Elasticsearch (ES) 是一个数据库,提供了分布式的、准实时搜索和分析。基于 Apache Lucene,可以操作结构化数据、非结构化数据、数字类型数据、地理空间数据。数据存储使用松散结构的 JSON 文档。主要特性轻量快速的全文搜索。 安全分析和基础设施监控。 ...

2020-01-19 09:30:51 101

原创 开发者必须要了解的架构技术趋势:Service Mesh

内容概要Service Mesh 是干啥的?解决了什么问题?Service Mesh 的特性Service Mesh 的主流实现有哪些?1. Service Mesh 是什么?简单来讲,Service Mesh 简化了微服务架构中服务间调用复杂度。这就涉及到了2个问题:服务调用怎么复杂了?Service Mesh 怎么解决的?(1)服务调用复杂度问题对于每个微服务,我们...

2020-01-17 08:48:59 570

原创 如何高效实用 Git

Git 工作流只要项目是多人参与的,那么就需要使用正确的 Git 工作流程。下面介绍一个简单有效的工作流程。场景假设有一个项目,要开发下一代的 Facebook,你就是这个项目的技术 leader,你的团队有3个开发人员:Alice:1年开发经验Bob:1年开发经验John:3年开发经验You:这个项目的技术 leaderGit 中的开发过程Master branch ...

2020-01-16 11:42:54 157

原创 轻松理解 Kubernetes 的核心概念

Kubernetes 迅速成为云环境中软件部署和管理的新标准。与强大的功能相对应的是陡峭的学习曲线。本文将提供 Kubernetes 的简化视图,从高处观察其中的重要组件,以及他们的关联。硬件(1)Node 节点Node(节点)是计算资源的最小单位,表示集群中单台计算机。可能是数据中心里面的计算机,也可能是云中的虚拟机,还可能是其他的东西。Node 就是一个抽象层,我们不必关注某台...

2020-01-14 13:14:41 158

原创 有效的微服务:10 个最佳实践

推荐阅读:架构设计原则 - 高并发使用 Canal 实现数据异构MySQL中一条SQL语句是如何执行的?阿里开源的分布式事务框架 SeataZooKeeper 并不适合做注册中心1. 领域驱动设计微服务开发的首要挑战:把大的、复杂的应用拆分为小的、自治的、可独立部署的模块。如果没有正确的拆分,那么结果就是一堆浆糊,有着单体结构的缺点,和微服务结构的复杂度,可以称之为分布...

2020-01-13 08:37:52 516

原创 网站 cache control 最佳实践

推荐阅读:2020年软件开发趋势高并发案例 - 库存超发问题负载均衡的分类及算法异地多活架构Postman 的替代品来了有时,当第二次访问网站时,看起来比较怪,样式不正常。通常,是因为 cache control 缓存控制策略定义不正确,导致服务端最新部署之后客户端没有接收到最新的更改。本文将向您展示正确的缓存设置,以便在每次部署后使所有用户的网站保持最新状态。缓存在后...

2020-01-12 18:13:59 160

原创 Kubernetes 核心概念

推荐阅读:图解 Kubernetes分布式唯一ID的生成方案如何判断一个元素是否存在于一个亿级数据集中?阿里开源的分布式事务框架 Seata高并发的常用策略接口级故障处理策略在本文中,我们将介绍基本的Kubernetes概念。Kubernetes的术语很多,可能会令人生畏。我将帮助您建立一个思维模型,以加快对技术的了解。首先,我们将研究6层抽象及其组成的各个部分。然后,...

2020-01-10 13:43:42 664

原创 最让程序员崩溃的7件事

1)中断 & 开会“中断” 可以说是程序员生产力的头号杀手,因为被打断之后很难回到之前的地方,需要重新梳理思路,很有可能半小时就过去了。被打断的次数越多,挫败感就越强,生产力也低,bug就越多,一连串的恶性反应。如果在早上就被打断,那么这一天很可能就出不了什么活儿了。开会呢?开会就是“有计划的打断”。2)琐碎型管理这类管理者是开发团队的绊脚石,他喜欢有点儿破事儿就开个会,有点...

2020-01-08 10:43:50 259

原创 微服务架构中如何构建一个数据报告服务?

场景描述在微服务架构中,每个微服务负责自己的数据库,微服务A是不允许直接连接微服务B的数据库进行操作的。现在有2个微服务,一个是订单服务,一个是用户服务。有一个数据报告的需求:生成一份包含用户信息的订单报告。这就需要获取2个服务中的数据,进行连接汇总。如何构建这个数据报告的服务呢?方案1 直接连接数据库直接连接订单服务、用户服务的数据库,获取所需的数据,拿到后进行加工处理即可。...

2020-01-07 12:45:03 308

原创 MySQL:如何查询出每个分组中的 top n 条记录?

问题描述需求:查询出每月 order_amount(订单金额) 排行前3的记录。例如对于2019-02,查询结果中就应该是这3条:解决方法MySQL 5.7 和 MySQL 8.0 有不同的处理方法。1. MySQL 5.7我们先写一个查询语句。根据 order_date 中的年、月,和order_amount进行降序排列。然后,添加一个新列:order_amount(本条记...

2020-01-06 18:41:27 928

原创 架构图解

这是一个很典型的架构描述图,下面我们就以此为例聊聊架构的基础概念。架构流程示例假设用户在搜索引擎中搜索“森林里浓雾和阳光”。用户点击了搜索结果中的一个图片网站链接,打开一张图片的详情页。这个页面的主要内容包括:主图图片信息,如标题、作者、描述、标签、评论 ……相关类似图片用户信息从用户点击了搜索结果中的那条连接,一直到呈现出最终的页面,中间经历了什么?(为了便于对照,再...

2020-01-04 08:44:08 312

原创 如何清理 Docker 占用的磁盘空间

Docker 很占用空间,每当我们运行容器、拉取镜像、部署应用、构建自己的镜像时,我们的磁盘空间会被大量占用。如果你也被这个问题所困扰,咱们就一起看一下 Docker 是如何使用磁盘空间的,以及如何回收。docker 占用的空间可以通过下面的命令查看:$ docker system dfTYPE 列出了docker 使用磁盘的 4 种类型:Images:所有镜像占用的空间,包括拉...

2020-01-03 08:50:43 2061

原创 不要把 JWT 用作 session

现在很多人使用 JWT 用作 session 管理,这是个糟糕的做法,下面阐述原因,有不同意见的同学欢迎讨论。首先说明一下,JWT 有两种:无状态的 JWT,token 中包含 session 数据。有状态的 JWT,token 中仅有 session ID,session 数据还是存储在服务端。本文讨论的是 “无状态的 JWT”,就是把用户的 session 数据放到 to...

2020-01-02 08:52:28 652 2

原创 图解 Kubernetes

容器在了解 Kubernetes 之前,让我们先了解一个容器。因为如果不了解容器就没法聊容器编排。容器就是…一个你塞入所有材料的容器。“材料”是指你的应用代码、依赖库,以及直到内核的依赖关系。关键概念是隔离,把你的这些材料隔离出来,以便更好的控制他们。容器提供了3种类型的隔离:工作空间隔离(进程、网络)资源隔离(CPU、内存)文件系统隔离容器可以理解为节食的VM,具有隔离...

2019-12-31 08:47:12 162

原创 如何构建可伸缩的Web应用?

为什么要构建可伸缩的Web应用?想象一下,你的营销活动吸引了很多用户,在某个时候,应用必须同时为成千上万的用户提供服务,这么大的并发量,服务器的负载会很大,如果设计不当,系统将无法处理。接下来发生的就是,随机错误、缓慢的内容加载、无休止的等待、连接断开、服务不可用等问题。辛辛苦苦吸引来的用户变成了系统的攻击者,把服务器资源耗尽,应用程序崩溃。你的大多数用户将丢失,产品评级将降低,市场将充...

2019-12-30 09:38:54 139

原创 2020年软件开发趋势

基础设施:终将上云现在云服务越来越普及了,不光是创业公司在使用云服务,连一些很保守的公司,和一些对很重视安全的公司都开始上云了,2020年上云的势头将更猛,各种体积的公司、各种类型的公司都会向云迁移。容器化:Kubernetes 将会更酷在容器编排领域,主角包括 Kubernetes, Docker Swarm, Mesos。Kubernetes 目前的优势很明显,增长势头强劲。云是分...

2019-12-29 09:12:04 297

原创 REST 安全基础

安全是 RESTful web service 的基石,我们主要讨论以下3种主要的方法:Basic authenticationOauth 2.0Oauth 2.0 + JWT1. Basic authentication这是最古老、最简单的方法。形式username + password + Base64。工作机制假设一个用户要登录 Facebook 账号,查看:feed...

2019-12-27 09:26:20 256

原创 为什么你应该使用 Kubernetes(k8s)

Kubernetes (Kube 或 K8s)越来越流行,他是市场上最好的容器编排工具之一。1. 什么是容器?容器就是一个包,其中包含了应用及其所有依赖。容器中的应用与主机系统是隔离的,不关注环境。不像虚拟机,容器不需要启动操作系统的完整周期,这就是为啥容器启动和停止都非常快,并且可以更高效使用磁盘、内存、处理器的原因。你不必记着你的应用是用什么语言和框架开发的,因为所需的一切都打包在...

2019-12-26 09:54:44 677

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除