1. 1 无处安放 汪峰
  2. 2 平凡之路 朴树
  3. 3 往后余生 马良
  4. 4 牧马城市 毛不易
无处安放 - 汪峰
00:00 / 00:00

词:汪峰

曲:汪峰

我闻到初春的味道

那如同儿时梦境新鲜的芬芳

也尝到思念的苦涩

这回望远方秋雨般无垠的萧索

心爱的人啊

多年以后是否还记得我的惦念

我的忧愁和挣扎

你知不知道

没有你我那颗叮叮当当的心啊

总是这样 这样无处安放

我去到来时的路上

还是那躺在公路尽头的月亮

电台里放着披头士

可那在我身旁熟睡的你在哪里

思念的人啊

人们常说时间会让爱变得淡忘

变得模糊和破碎

可你知不知道

没有你我那颗叮叮当当的心啊

总是这样 这样无处安放

回望这纷乱的生活

有太多人在我心底匆匆掠过

可当我想念的时候

却只有你让我静静地流下眼泪

心爱的人啊

时光飞逝我们终究要渐渐老去

渐渐恐惧和放弃

可你知不知道

没有你我那颗叮叮当当的心啊

终将这样 这样无处安放

终将这样 这样无处安放

Clay 的技术空间

用进废退 | 艺不压身

前言

消息队列中间件选择时要根据项目的实际需求,考虑系统的吞吐量、延迟、可靠性、可扩展性等因素。

消息中间件产品对比一

消息队列适用场景优点缺点
Kafka 日志收集、大数据处理、实时流处理高吞吐量、高扩展性不支持复杂消息模型,有一定学习成本
RabbitMQ 企业消息传递、即时通讯、延时任务灵活的路由、支持多协议吞吐量较低,扩展性一般
RocketMQ 交易系统、订单系统、金融系统高性能、支持分布式事务、顺序消息社区支持一般,维护门槛高
ActiveMQ 小规模企业集成、跨平台消息传递灵活、协议支持多性能低,扩展性有限
阅读全文 »

系统级命令

获取符合规则的键名列表

KEYS 命令需要遍历 Redis 中的所有键,当键的数量较多时会严重影响性能,在生产环境中应该禁用该命令。

1
KEYS pattern

示例:

1
2
redis> KEYS *
1) "book"
阅读全文 »

前言

负载均衡的实现

  • TCP 层实现的负载均衡,例如:LVS(调度性能强悍)
  • 应用层实现的负载均衡,例如:Nginx、Haproxy、Apache、Varnish、Squid、Ribbon

Keepalived 概述

Keepalived 简介

  Keepalived 是 Linux 下一个轻量级别的高可用开源解决方案,高可用 (High Avalilability),其实两种不同的含义:广义来讲,是指整个系统的高可用行,狭义的来讲就是之主机的冗余和接管,它与 HeartBeat RoseHA 实现相同类似的功能,都可以实现服务或者网络的高可用;但是又有差别,HeartBeat 是一个专业的、功能完善的高可用软件,它提供了 HA 软件所需的基本功能,比如:心跳检测、资源接管、检测集群中的服务、在集群节点转移共享 IP 地址的所有者等等。HeartBeat 功能强大,但是部署和使用相对比较麻烦,与 HeartBeat 相比,Keepalived 主要是通过虚拟路由冗余来实现高可用功能,虽然它没有 HeartBeat 功能强大,但是 Keepalived 部署和使用非常的简单,所有配置只需要一个配置文件即可以完成。Keepalived 实现了轻量级的高可用,一般用于前端高可用,且不需要共享存储,一般常用于两个节点的高可用。而 Heartbeat 用于服务的高可用,且需要共享存储,一般用于多节点的高可用。

  Keepalived 起初是专为 LVS 设计的,用来管理并监控 LVS 集群系统中各个服务节点的状态,后来又加入了可以实现高可用的 VRRP 功能。因此,Keepalived 除了能够管理 LVS 软件外,还可以实现任意两台主机之间,例如 Master 和 Backup 主机之间的故障转移和自动切换,这个主机可以是普通的不能停机的业务服务器,也可以是 LVS 负载均衡、Nginx 反向代理这样的服务器。Keepalived 软件主要是通过 VRRP 协议实现高可用功能的,VRRP 是 Virtual Router Redundancy Protocol(虚拟路由冗余协议)的缩写,VRRP 出现的目的就是为了解决静态路由的单点故障问题的,它能保证当个别节点宕机时,整个网络可以不间断、稳定地运行。所以,Keepalived 一方面具有配置管理 LVS 的功能,同时还具有对 LVS 下面节点进行健康检查的功能,另一方面也可以实现系统网络服务的高可用功能。

阅读全文 »

大纲

索引的介绍

索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),包含了对数据表里所有记录的引用指针。索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索引包含多个列。创建索引时,需要确保该索引是应用在 SQL 查询语句的条件 (一般是 WHERE、JOIN 子句的条件)。

索引的类型

  • FULLTEXT:即为全文索引,目前只有 MyISAM 引擎支持,其可以在 CREATE TABLE,ALTER TABLE,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR、TEXT 列上可以创建全文索引
  • HASH:由于 HASH 的唯一性及类似键值对的形式,很适合作为索引,HASH 索引可以一次定位,不需要像树形索引那样逐层查找,因此具有极高的效率。但是,这种高效是有条件的,即只在 = 和 in 条件下才高效,对于范围查询、排序及组合索引仍然效率不高
  • BTREE:一种将索引值按一定的算法,存入一个树形的数据结构中(二叉树),每次查询都是从树的入口 Root 开始,依次遍历 Node,获取 Leaf,这是 MySQL 里默认和最常用的索引类型
  • RTREE:在 MySQL 很少使用,仅支持 geometry 数据类型,支持该类型的存储引擎有 MyISAM、BDb、InnoDb、NDb、Archive
阅读全文 »

Puppeteer 介绍

Puppeteer 是什么

Puppeteer 是一个 NodeJs 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。相比较 Selenium 或是 PhantomJs,它最大的特点就是完全可以在内存中模拟 DOM 操作,即在 V8 引擎中处理而不打开浏览器,而且关键的是该项目是 Chrome 团队在维护,会拥有更好的兼容性和前景,更多资料可参考以下站点:Puppeteer GithubPuppeteer 中文文档DevTools Protocol 文档Chromium 命令行启动参数

Puppeteer 的功能

  • 生成页面的截图和 PDF
  • 自动提交表单,进行 UI 测试,键盘输入等
  • 捕获网站的时间线跟踪,用来帮助分析性能问题
  • 抓取 SPA(单页应用),并生成预渲染内容,即 “SSR”(服务器端渲染)
  • 创建一个最新的自动化测试环境,使用最新的 JavaScript 和浏览器功能,直接在最新版本的 Chrome 中运行测试
  • 测试浏览器扩展,Chrome / Chromium 扩展当前只能在非无头模式下使用,目前还无法测试扩展弹出窗口或内容脚本
阅读全文 »

前言

容器化技术的出现标准化了服务的基础设施,统一了应用的打包分发、部署及操作系统相关类库等,解决了测试及生产部署时环境差异的问题,更方便分析排查问题。对运维来说,由于镜像的不可变性,更容易进行服务部署升级及回滚。另外利用诸如 Kubemetes 之类的容器管理平台,更容易实现一键部署、扩容、缩容等操作,更能将微服务架构、DevOps、不可变基础设施的思想落地下来。本文重点讲述 Spring Cloud 如何使用 Docker 实现容器化。

Java 服务 Docker 化

基础镜像选择

操作系统层面,可以选择传统的 Centos、Ubuntu 或者轻量级的 Alpine。其中 Ubuntu 16.04 版本的镜像大小约为 113M,压缩后大约 43M;Centos 7 版本的镜像大小约为 199M,压缩后大约为 73M;而 Alpine 3.7 版本镜像大小约为 4.15M,压缩后约为 2M。关于基础镜像的选择,一个是考虑镜像大小,一个是只提供最小的依赖包。关于第二点,不同的服务应用依赖包是不同的,这里不再展开,只从镜像大小角度考虑的话,Alpine 是首选,镜像小,远程推拉镜像的速度快,更为方便,这里建议釆用 Alpine 镜像作为基础镜像。从 Docker 镜像分层缓存的机制来考虑,如果选择了比较大的基础镜像,DockerFile 编写时可以适当分层,然后集中在几台镜像打包机上处理镜像打包及上传,这样可以充分利用打包机镜像分层缓存的机制,减少上传镜像的耗时。但是对于分布式服务的 Docker 部署,目标服务实例部署的机器比较多而且是随机的,就没办法利用这个机制来加快镜像下载速度。

阅读全文 »

前言

很多优秀的程序员和技术人员喜欢写技术文章和技术博客,通过这样的方式分享传播知识和经验,扩大自己的知名度和影响力,吸引粉丝关注,甚至有些技术博主还通过写文章来获取广告收入,还通过这种方法获得了出版书的机会以及工作机会。因此,写技术文章是一件非常值得投入的事情,帮助了自己,也让大众受益。但是,写技术文章通常也很耗时,特别是一些优质文章,不仅需要旁征博引、构思文章结构、照顾读者受众,还需要做很多前期工作,例如搭建环境、写 Demo 代码、测试代码等等。一篇优质技术文章通常需要 3-6 个小时来完成,可花了很多时间来写文章,最终发布出来的文章得不到很多人的关注是一件相当令人沮丧的事情。因此,优质文章值得获取关注和传播,让更多的技术工作者通过阅读文章获取知识获益。每个技术博主都有自己喜欢的技术媒体平台,例如简书、知乎、掘金、CSDN、微信公众号等等。很多技术博主也喜欢将文章发布在不同的平台上,寻求最大的关注度,同时也防止自己辛辛苦苦写的文章被别人复制粘贴盗版过去。然而,在多个平台上发文是一件麻烦的事情:博主需要同时登陆多个媒体平台,将自己的文章复制一个一个粘贴过去;更麻烦的是,有些平台只支持 Markdown,有些平台只支持富文本,博主需要在这两者之间来回转换,这增加了工作量。一文多发平台 ArtiPub 就解决了这样的问题,下面将介绍开源的一文多发平台 ArtiPub。

ArtiPub 简介

ArtiPub(Article Publisher 的简称,意为” 文章发布者”)是一款开源的一文多发平台,可以帮助文章作者将编写好的文章自动发布到简书、掘金、SegmentFault、CSDN、知乎、开源中国等技术媒体平台,传播优质知识,获取最大的曝光度。ArtiPub 安装简单,提供了多种安装方式(Docker、NPM、源码),可以一键安装使用,安装一般只要 5 分钟。ArtiPub 目前支持文章编辑、文章发布、数据统计的功能,后期会加入存量文章导入、数据分析的功能。此外,ArtiPub 日后还会接入更多媒体渠道,真正做到让文章随处可阅。用户使用 ArtiPub 也很简单,只需要在浏览器上打开 ArtiPub 的 Web 界面,将文章以 Markdown 的形式输入到编辑器,然后点击一键发布,等待不到 1 分钟,文章就自动同步到各大技术媒体平台了。此外,文章的阅读、点赞、评论数据还将周期性的被同步回来,让作者可以近实时看到文章的传播情况。

阅读全文 »

前言

MySQL 实现分布式锁,常见的方案有以下几种:

  • 基于唯一索引(INSERT 操作)实现
  • 基于排他锁(SELECT FOR UPDATE)实现
  • 基于乐观锁(CAS)实现
阅读全文 »

大纲

前言

在传统的 SOA 架构体系中,系统调用层级不多,调用关系也不复杂,一旦出现问题,根据异常信息可以很快定位到问题模块并进行排查。但是在微服务的世界里,实例数目成百上千,实例之间的调用关系几乎是网状结构,靠人力去监控和排查问题已经不太可能。这种情况下,一个完善的调用链路监控框架对于运维和开发来说,都是不可或缺的。

阅读全文 »