8 nogos

尚未进行身份认证

I can do it

等级
TA的排名 1w+

Golang 限流器 time/rate 使用介绍

  本主题为系列文章,分上下两篇。本文主要介绍 time/rate 的具体使用方法,另外一篇文章 《Golang 限流器 time/rate 实现剖析》 则着重介绍其内部实现原理。  限流器是后台服务中的非常重要的组件,可以用来限制请求速率,保护服务,以免服务过载。限流器的实现方法有很多种,例如滑动窗口法、Token Bucket、Leaky Bucket 等。  其实 golang 标准库...

2020-01-26 21:52:19

幂等

什么是幂等  简单说来,如果一个操作多次执行所产生的影响等价于执行一次的影响,我们就称之为幂等。  实际系统中,幂等是一个极为重要的概念。无论是在大型互联网应用还是企业级架构中,我们都见到REST API被越来越多的采用。而正确实现幂等,往往是API中最难的技术点之一。为什么重要,举一个简单易懂的例子。  比如,你要处理一次电商网站收款或者付款的交易。当你给微信支付发送这个付款请求后,一个理...

2019-11-28 23:58:22

微服务架构实现最终一致性的三种模式

  根据CAP理论,必须在可用性(Availability)和一致性(Consistency)之间做出选择。如果选择提供一致性,则需要付出在满足一致性之前阻塞其他并发访问的代价。这可能持续一段不确定的时间,尤其是系统已经表现出高延迟或者由于网络故障而失去连接时。  依据目前的成功经验,选择可用性一般更有利于微服务架构的构建,但是在服务和数据库之间维护数据一致性是非常根本的需求,在微服务架构中应该...

2019-11-24 12:56:23

Serverless概述

概念  我们把 Serverless 拆解为 server 和 less 两个单词,从字面上推断词意即为“少服务器的,亦或是无服务器的”。当然这并非指应用架构中是没有服务器资源的,而是通过 Serverless 这种服务形态,用户在使用对应的服务时,不需要关心或较少关心服务器的硬件资源、软件资源、稳定性等等,这些通常已经由云计算厂商提供设施、服务和 SLA 保障,完全托管给云计算厂商。而用户只需...

2019-11-19 16:56:32

1.3万亿条数据查询如何做到毫秒级响应?

  知乎,在古典中文中意为“你知道吗?”,它是中国的 Quora,一个问答网站,其中各种问题由用户社区创建,回答,编辑和组织。  作为中国最大的知识共享平台,我们目前拥有 2.2 亿注册用户,3000 万个问题,网站答案超过 1.3 亿。随着用户群的增长,我们的应用程序的数据大小无法实现。我们的 Moneta 应用程序中存储了大约 1.3 万亿行数据(存储用户已经阅读过的帖子)。  由于每月...

2019-11-18 17:25:40

架构师必须了解的30条设计原则

众所周知,架构师的角色,更偏向于策划、而非指挥,塑造、而非支配,其存在的意义,在于引导大家讨论、而非自己主宰一切。但是,具体应该如何执行呢?本文作者整理了 30 个公认的架构原则,来帮助大家解决此问题。也许有的原则,你从未听说,但你看完就能快速学会。相信你学会了,工作起来也会事半功倍,或许还可帮你避免很多无用的加班!在 WSO2,我参与架构评审的时间已长达八年之久。WSO2 的产品非常丰富,...

2019-11-18 16:07:45

压测模型及其优缺点

压测模型抽象压测模型可以被抽象为如图所示的模型该模型主要包含如下三个部分:压测环境准备环境准备是压测的基础,主要包括1、压力机资源2、被压测系统3、依赖资源压测任务准备压测任务准备主要是为了梳理压测目标,确定压测方案,可以细化为如下几个方面:压测目标:比如期望达到的QPS、稳定性要求。压测场景:业务场景的选取、组合压测策略:逐步加压,增大脉冲,并发量等。压测执行闭环压...

2019-11-12 23:48:28

物化视图

Oracle物化视图  Oracle的物化视图是包括一个查询结果的数据库对像。将一些大的耗时的表连接用物化视图实现,会提高查询的效率。  物化视图在某种意义上说就是一个 物理表,物化视图会占用数据库磁盘空间,甚至可以创建索引。数据生成模式Build Immediate  创建物化视图的时候就生成数据 。Build Deferred(默认)  在创建时不生成数据,以后根据需要在生成数据...

2019-10-13 12:30:47

分库分表

  互联网行业中,由于有庞大的用户量存在,所以会产生海量的请求。这些请求产生的交易数据和信息都需要存储在关系型数据库中。由于数据量很大,单个数据库已经难以容纳所有数据,所以产生了分库分表的需求。分库分表,顾名思义,就是使用多个库和多个表甚至多个数据库实例来存储海量的数据。什么是分库分表  数据拆分是对数据分而治之的通用概念,在数据库存储方面是通过分库分表来实现数据拆分的,对数据的拆分主要体现在...

2019-10-09 21:03:47

什么是分布式锁?

单机多线程并发分布式集群环境下的多线程并发分布式锁的实现1 Memcached分布式锁利用Memcached的add命令。此命令是原子性操作,只有在key不存在的情况下,才能add成功,也就意味着线程得到了锁。2 Redis分布式锁和Memcached的方式类似,利用Redis的setnx命令。此命令同样是原子性操作,只有在key不存在的情况下,才能set成功。(setn...

2019-08-12 13:20:10

pprof (golang 性能监控与分析)

参考文章https://blog.wolfogre.com/posts/go-ppof-practice/https://xguox.me/go-profiling-optimizing.html/https://segmentfault.com/a/1190000016412013https://github.com/google/pprof示例代码package mainimp...

2019-06-27 14:01:25

golang 深入理解map引用类型

理解指针什么是指针?指针是一种特殊的类型,指针变量的值是一个地址,该地址指向一个“指针类型”的变量指针声明var 指针变量名 *指针类型示例package mainimport( "fmt")func main() { var int_value = 10 var int_ptr = &int_value fmt.Printf("The ...

2019-05-28 13:07:35

TiDB 单机安装

官方地址: https://github.com/pingcap/docs-cn1 下载压缩包# 下载Tidb[root@admxj-core ~]# wget http://download.pingcap.org/tidb-latest-linux-amd64.tar.gz# 下载Tidb校验文件wget http://download.pingcap.org/tidb-latest...

2019-05-22 16:58:19

缓存更新的套路

看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。我不知道为什么这么多人用的都是这个逻辑...

2019-05-10 21:10:27

go面向对象 vs c++面向对象

面向对象的四大特性抽象—数据抽象(属性)和过程抽象(方法)封装—限定对外方法,控制数据访问继承—数据共享、代码重用多态—派生对象就是父对象c++ 抽象和封装#include <iostream>using namespace std;class rect {private: int length; //长度 int width; //宽度pu...

2019-04-11 17:28:06

Redis设计与实现——读书笔记

数据结构与对象SDS(Simple Dynamic String)struct sdshdr { int len;//已使用字节数 int free;//未使用字节数 char buf[];//字节数组}特点:1、空间预分配策略,减少内存重分配次数(内存分配涉及系统调用)。2、获取长度O(1),通过属性记录字符串长度。3、杜绝缓冲区一次,通过API对SDS进行修改时,会先检查...

2019-03-28 23:28:31

select、poll、epoll、同步、异步、阻塞、非阻塞总结

IO多路复用之select、poll、epoll综述目前支持I/O多路复用的系统调用有 select,pselect,poll,epoll,I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,pselect,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写...

2019-02-28 10:53:28

Unix环境高级编程——学习笔记

第七章 进程环境引言main函数是如何被调用的?命令行参数是如何传送给执行程序的?典型的存储器布局是什么样式?如何分配另外的存储空间?进程如何使用环境变量?进程终止的不同方式?main函数main函数的原型是:int main(int argc, char *argv[ ]) ;argc:命令行参数的数目。argv:指向各个参数的指针所构成的数组。进程终止(1) 正常...

2019-02-28 10:52:13

kubernetes权威指南——入门概述

Kubernetes是什么  首先,它是一个全新的基于容器技术的分布式架构领先方案,简称K8s。K8s是Borg的一个开源版本,Borg是谷歌内部一个久负盛名的大规模集群管理系统,它基于容器技术,目的是实现资源管理的自动化以及跨数据中心的资源利用率最大化。  其次,如果我们的系统设计遵循了K8s的设计思想,那么传统系统架构中那些和业务没有多大关系的底层代码或功能模块,都可以立刻从我们的视线中消...

2019-02-24 14:48:31

深入理解PHP内核——变量及数据类型

静态类型语言 VS 动态类型语言从类型的维度来看,编程语言可以分为三大类:静态类型语言,比如:C/Java等,在静态语言类型中,类型的检查是在编译期(compile-time)确定的, 也就是说在运行时变量的类型是不会发生变化的。动态类型语言,比如:PHP,python等各种脚本语言,这类语言中的类型是在运行时确定的, 那么也就是说类型通常可以在运行时发生变化无类型语言,,比如:汇编语言...

2019-02-22 16:55:01

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv2
    勤写标兵Lv2
    授予每个自然周发布4篇到6篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。