自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(198)
  • 收藏
  • 关注

原创 go-micro examples 中web & form 代码学习(web类 网站的微服务架构:micro api + micro web + web service + api service)

以下对应 example/web 例子:main.go 代码如下:package mainimport ( "fmt" "log" "net/http" "github.com/micro/go-micro/web")func helloWorldHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprint...

2020-01-11 00:23:58 555

原创 go-micro examples 中service 代码学习(开发基于go-micro的微服务)

这是一个 创建 微服务 的例子:https://micro.mu/docs/cn/writing-a-go-service.html目录如下:greeter.proto 代码如下:syntax = "proto3";service Greeter { rpc Hello(Request) returns (Response) {}}message Request...

2020-01-06 19:44:52 517

原创 go-micro examples 中grpc 代码学习(开发grpc类型的微服务 和 网关)

这个例子展示了 go-micro/service/grpc 的使用方法。目录 greeter -- 问候 微服务目录 gateway -- grpc 网关创建 micro.Service : service := grpc.NewService()Pre-existing ServiceWhat if you want to add grpc to a pre-existi...

2020-01-06 16:46:25 1194

原创 grpc-ecosystem/grpc-gateway 基本概念和原理 / 实现网关和微服务

目标:简单微服务+ grpc-ecosystem/grpc-gateway;https://github.com/grpc-ecosystem/grpc-gatewayhttps://grpc-ecosystem.github.io/grpc-gateway/grpc-gateway 是 google bufers 协议的 编译器 protoc 的 一个插件。它 读取 proto...

2020-01-02 19:23:47 5060

原创 golang中使用第三方库google grpc 实现基础的微服务

使用的包:google grpc (google.golang.org/grpc);net;使用protobuf 协议;proto3 语法;目录:user.proto 代码如下:syntax = "proto3"; //指定语法格式,注意 proto3 不再支持 proto2 的 required 和 optinalpackage proto; //指定生成...

2020-01-02 17:38:57 2011

原创 protobuf基础概念和认知

Protocol Buffers - google的数据交换协议。Protobuf 官方定义:protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍...

2020-01-02 17:14:20 566

原创 golang的rpc使用/ go实现简单的基础的微服务

在golang中实现RPC非常简单,有封装好的官方库和一些第三方库提供支持。golang官方的net/rpc库使用encoding/gob进行编解码,支持tcp或http数据传输方式,由于其他语言不支持gob编解码方式,所以使用net/rpc库实现的RPC方法没办法进行跨语言调用。golang官方还提供了net/rpc/jsonrpc库实现RPC方法,JSON RPC采用JSON进行数据编...

2020-01-02 16:52:57 909

原创 go版本发布历史

go版本发布历史 -- 概要--1.13 版本从Go 1.13开始,go命令默认使用Go module mirror和Go checksum database来下载和认证modules。语言的变化根据数字文字提案,Go1.13支持更统一和现代化的数字文字前缀前缀0b或0B表示二进制整数字面值,例如:0b1011前缀0o或0O表示八进制整数字面值,例如:0o660前缀0x...

2019-12-30 11:00:10 1974 1

原创 swoole微服务/EasySwoole微服务实践 一:网关和服务基础搭建

利器/原则: 文档也不是面面俱到!看源码啊!必须看源码!当然不想看源码的,可以加入作者的VIP群,哈哈。

2019-12-10 15:48:23 2364

原创 linux centos7.6 下安装 php7.2.18

1 ifconfig 2 ip addr show 3 service 4 cd /etc/sysconfig/network-scripts/ 8 vim ifcfg-ens33 9 vi ifcfg-ens33 10 service network restart 11 ifconfig 12...

2019-12-10 11:45:17 726

原创 require.js及模块化编程相关概念

github地址:https://github.com/requirejs/requirejs好的文章:https://www.jianshu.com/p/8687f539642crequire.js 是一个JavaScript文件和模块加载器,也是模块管理工具requireJs 作用是什么,优势是什么? 它解决什么难题?1. 有效防止了命名冲突2. 声明了不同 JS 文件...

2019-12-07 22:36:36 144

原创 jquery的基础用法

如何自定义事件? <script> $(function(){ $('.son').on('myclick'function(){ alert('son') }) $('.s...

2019-12-05 18:09:47 100

原创 yii2中项目中对tinyint中各种值的处理-enum类的封装使用

数据库中经常会使用tinyint 的字段如:status : -1删除;0禁用;1启用;schooleType : 1小学;2中学;3高中;4大学;等为了避免在 控制器,模型,视图中大量出现硬编码情况。要使用常量来代替 1,2,3这样数值;代码如下;namespace common\enums;use Yii;trait Enum{ public s...

2019-11-06 19:32:36 496

原创 带图片的Excel表格导入/Excel中png图片的获取

需求:Excel表格是学校的很多信息,包括基本信息,专业信息等,有多个sheet;需以此表格为依据导入到数据库生成一个学校;或者更新一个学校的信息;难点: Excel表格中 学校的logo 是图片;是jpg,png,等格式;png格式是 如何正确获取到这张图片。使用的第三方处理excel表格的库为:\PhpOffice\PhpSpreadsheet代码:public sta...

2019-11-06 18:01:01 2183

原创 PHP使用GD库生成签名图片png图片

需求:根据输入的名字,自动计算名字字符的长度,来生成相应的签名png图片难点: 自动计算输入文本的长度 public static function generateSignImage($sign_name){ if(empty($sign_name)){ return ['status' => false]; } ...

2019-11-06 17:32:53 944

原创 使用PHP的GD库生成报告图片

效果如图:需求:1. 姓名,指标,评价文字 是由网页表单 提交给后端;右下角的签名是png 图片;背景是A4大小的图片;涉及知识点:1.给图片加水印 (签名,对号); 2. gd库 输入文本生成图片; 3. 选择合适的字体 .ttf格式难点:1. 文本换行;行末避免单词被拆分为两块(保证单词...

2019-11-06 17:23:24 1017

原创 关于Sign in with Apple (Apple 登录) PHP的后端验证

1. 首先阅读官网文档https://developer.apple.com/documentation/signinwithapplerestapi重点讲解苹果授权登陆 后端PHP如何验证1.identityToken 的验证:客户端会向后端 传递 userIdidentityToken email 等参数后端必须要验证identityToken 的有效性,合法性;关于...

2019-11-04 10:04:56 12749 5

原创 PHP5.4.x至PHP7.1.x的新特性

5.4.x 到 5.5.x新特性:1. 新增 GeneratorsSupport forgeneratorshas been added via theyieldkeyword. Generators provide an easy way to implement simple iterators without the overhead or complexity of...

2019-09-23 17:20:04 525

原创 yii2.0框架

图片生成有"yiisoft/yii2-imagine": "~2.1.0", 库,安装:sudo curl -O ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gzextension=imagick.so安装 freetype问题 1. 只是简单生成一段文字(几百个字符)和加水印, 就很慢(30s左右),效率...

2019-08-17 15:40:33 278

原创 Linux下安装php7.0,php7.1,php7.2,php5.6; 安装扩展xdebug-2.7.2; 安装扩展redis-4.3.0;(怀疑人生的一次安装经历!)

./configure --enable-fpm --prefix="/alidata/server/php7.0.33" --with-config-file-path="/alidata/server/php7.0.33/etc/" --with-gd --with-gettext --with-iconv-dir --with-kerberos --with-libdir=lib64 --...

2019-05-28 11:30:59 683

原创 Go并发模式/设计模式-重启异常的goroutine

在长期运行的后台程序中, 如果没有外部干涉,一个goroutine 很容易进入一个不正常的状态,并且无法恢复。在一个长期运行的程序中,建立一个机制来 监控 goroutine 是否 是健康的的状态 是有用的, 当它们变得异常时,就可以重启。我们将这个重启goroutine 的过程称为 "治愈 Healing"为了治愈goroutine, 需要使用心跳模式来检查我们正在监控的gorouti...

2019-05-04 22:11:06 665

原创 Go并发模式/设计模式之速率限制(API速率限制)

速率限制;它限制了某种资源在某段时间内 被访问的次数。 资源可以是任何东西: API连接, 磁盘读写, 网络包, 异常。通常情况下 用户对系统的访问应当 被沙盒化,既不会影响其他用户的活动, 也不会受到其他用户的影响。访问 收费系统 时, 速率限制可以使你与客户保持良好的关系。Google 的云服务中 就用到了 速率限制。Go语言 中 如何 进行限速呢?大多数的限速 是基于 令牌桶...

2019-05-03 21:01:00 2349

原创 Go并发模式/设计模式之复制请求

复制请求程序正在处理 用户的HTTP请求, 或者检索一个数据块。你可以将请求分发到多个处理程序(无论是 goroutine ,进程, 还是服务器),其中一个将比其他处理程序返回更快,可以 立即返回结果。下面例子 在 单个进程中, 使用多个goroutine 作为处理程序。goroutine 将随机休眠一段时间以模拟不同的负载,func main() { doWork := fun...

2019-05-02 17:34:31 166

原创 Go并发模式/设计模式之心跳

心跳是 并发进程向外界发出信号的一种方式两种不同类型的心跳:1。 在一段时间间隔内发出的心跳2。 在工作单元开始时发出的心跳。func main() { doWork := func(done <-chan interface{}, pulseInterval time.Duration) (<-chan interface{}, <-chan time.Tim...

2019-04-30 23:27:03 629

原创 Go并发模式之异常

出现异常表示着 系统 进入了 一个无法满足用户操作的状态,这个操作可能是显式的, 也可能是隐式的。 这是需要传达一些信息:1。 发生了什么 : 对异常事件的描述2。 发生在什么时间, 什么位置 : 异常还应该包含 栈轨信息;异常还应包含对应机器上时间,并最好utc 时间。3。 对用户友好的信息 : 自定义信息;应该包括前两点的概述; 从用户角度考虑,给出信息4。 告诉用户如何获得更...

2019-04-21 19:59:41 273

原创 Go并发模式之context(比done channel 更加强大)-取消goroutine的好的解决方案

在并发程序中, 由于超时、取消、或系统的其他部分的故障 往往需要抢占操作。done channel 可以在你的程序中流动并取消所有阻塞的并发操作。 看起来不错,但是还不完美,还不是很够用。什么样的功能还需要呢?什么样功能才算完美呢?如果我们可以在简单的通知上附加传递额外的信息; 如 为什么取消发生, 函数是否有需要完成的最后期限(超时), 这些情况下这些功能 非常有用。contex...

2019-04-19 19:36:53 3114

原创 Go并发模式之队列

带缓存的 channel, 其实就是一种队列。引入队列,通常是优化程序时希望采用的最后一种技术之一。预先添加队列可以隐藏同步问题,例如死锁,和活锁。常见错误认识: 引入队列来尝试解决性能问题,队列几乎不会加速程序的总运行时间,它只会让程序的行为有所不同。举例如下:图 todo看看如下这个pipeline:p := processRequest(done, acceptConn...

2019-04-09 23:40:46 749

原创 Go并发模式之桥接channel(bridge channel)

作为channel 消费者 不关心其值来自一系列的channel的事实。这种情况下处理一个充满channel的 channel这种情况很多。我们可以做的是 : 将充满channel的channel 拆解为一个简单的channelfunc main() { bridge := func(done <-chan interface{}, chanStream <- chan &...

2019-04-07 17:34:41 523

原创 Go并发模式之将channel一分为二(tee channel)

想把一个channel 一变二;以便 将它们发送到 代码的两个不同独立区域中。func main() { tee := func(done <-chan interface{}, in <- chan interface{})( <-chan interface{}, <-chan interface {}) { out1 := make(chan inter...

2019-04-06 23:47:57 453 1

原创 Go并发模式之如何很好很强大读取channel(orDone函数)

我需要从 一个channel中读取数据; 这个channel 我不能对他行为(如: 什么时候被close(),被取消)做出假设,可以 range 读取(但是 总要判断 true 才能使用他返回的值,不爽!);for val := range myChan{ //用val 执行某些操作}可以使用 select 来包装 读操作如下:loop:for { select{ ...

2019-04-06 23:12:14 839

原创 Go并发模式之pipeline(管道)

pipelinepipeline 是你可以用来在系统中形成抽象的另一种工具。特别是当程序需要流式处理 或批处理数据时,它是一个非常强大的工具。pipeline 只不过是一系列将数据输入, 执行操作并将结果数据传回的系统。 将这些操作称为 pipeline 的一个 stage.通过使用pipeline, 可以分离每个stage的关注点, 这提供了很多好处。如可以可以相互独立地修改各个...

2019-04-06 21:35:21 2647

原创 Go并发模式之 错误处理

不好的处理错误方式,或者说 没有进行错误处理的例子:func main() { checkStatus := func(done <-chan interface{}, urls ...string) <-chan *http.Response{ responses := make(chan *http.Response) go func() { defer ...

2019-03-26 22:58:02 897

原创 Go并发模式之 防止goroutine泄漏

goroutine 有以下几种方式被终止:1。 当他完成了它的工作。2。 因为不可恢复的错误, 它不能继续工作3。 当他被告知 需要终止工作。我们可以简单的使用前两种方法, 因为这两种方法隐含在你的算法中, 但"取消工作" 又是怎样工作的呢?例如:这样情况: 子goroutine 是否该继续执行可能是以许多其他goroutine 状态的认知为基础的。通常是 main gorou...

2019-03-17 23:22:58 1602

原创 Go并发模式之 for-select

for - selectfor{ //要不就无限循环,要不就使用range 语句循环 select{ //使用channel进行作业 }}以下情况使用 for-select向channel 发送迭代变量 ---for selectfor _, s := range []string{"a", "b", "c"}{ select { ...

2019-03-17 18:14:39 8236

原创 Go并发模式之 约束

约束:在编写并发代码的时候,有以下几种不同的保证操作安全的方法。1。 用于共享内存的同步原语(如sync.Mutex)2. 通过通信来 共享内存来进行同步(如 channel)在并发处理中还有其他几种情况也是隐式并发安全的:3。 不会发生改变的数据4。 受到保护的数据约束:特定约束,和 词法约束特定约束:是通过公约实现约束的。 无论是由语言社区, 你所在的团队, 还是你的代码...

2019-03-17 17:58:20 162

原创 Go并发原语/并发组件/go并发核心语法 之select

select 语句是 将各种channel 绑定在一起的粘合剂; 连接各种组件在一起;select 语句可以帮助安全地将channel 与诸如取消,超时,等待和默认值之类 的概念结合在一起。与 switch 块不同, select 块中的case 语句没有测试顺序,如果没有满足任何条件,执行也不会失败。如果所有channel 都没有准备好,则阻塞状态直到 。当一个channel准备好了,...

2019-03-16 23:31:22 243 1

原创 Go并发原语/并发组件/go并发核心语法 之channel

channel:虽然 他们可以用来同步内存访问; 但他们最好用于在 goroutine 之间传递信息。命名: 像河流一样,一个channel充当着信息传送的管道,值可以沿着channel传递,然后在下游读出。由于这个特点,通常使用"stream" 来做 chan 变量名的后缀。创建channel 语句:var dataStream chan interface{}...

2019-03-16 23:14:54 18918 2

原创 MongoDB复制集和分片

复制集:复制提供了两方面的好处: 高性能 和 高可用性奇数: 应确保服务器为奇数,这样更容易选举出主服务器复制策略:服务器数量: 如果客户端主要是写入数据,使用大量服务器并不能带来多大好处;但有大量的写入请求,则添加更多备份服务器肯定会有很大的影响。副本集数量:容错: 部署副本集:1.  2.  为复制集 中的每个服务器配置 replSet值。可以在文件 m...

2019-02-24 23:06:28 1032 1

原创 MongoDB应用场景

在百度云的应用(2015年):通信录,短彩信备份网盘图片视频meta (分片数达到了30个)网盘图片时光轴;用户操作日志;数据规模网盘图片meta 数目在千亿以上。业务数量几百个数据总量PB级别 (几百台物理机)部署结构:入口: rest 统一入口磁盘: 使用ssd, 做 raid0主从: 一主多从(1-3); 核心业务 一主三从, 像用户日志采用 ...

2019-02-24 15:25:00 744

原创 mongodb事务- writeConcern复制集- 部署- 原理

背景mongodb3.2mongodb ACID 事物支持 事务类型 MongoDB的支持 MySQL的支持 Atomicity 单行/文档级原子性 多行原子性 Consistency 强一致或最终一致 强一致 ...

2019-02-23 21:49:05 410

空空如也

空空如也

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

TA关注的人

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