LOADING

Follow me

Golang漫谈之channel妙法
10月 04 2019|

除了《Kubernetes GO》系列之外,对于golang相关知识,同时准备了《Golang 漫谈》以增雅趣,不足之处,万望海涵,在此特别感谢雨痕的Golang 源码剖析

Golang 1.13.1已在9月26日正式发布,主要修复CVE-2019-16276,当然docker等相关组件也同时做了update

channel是Golang提供的goroutine间的通信方式,其为Golang并发模型CSP的关键,Golang鼓励用通讯实现数据共享,如果需要跨进程通信,建议使用分布式方案或者消息队列来解决。该文章主要介绍,以下内容:

  • channel介绍及范例
  • channel用法
  • channel使用场景
  • channel原理赏析

下面在进入正题之前,简要介绍一下CSP模型:

传统并发模型分为Actor模型与CSP模型,其中CSP全称为Communicating Sequential Processess,CSP模型有并发执行体(进程、线程、协程),和消息通道组成,执行体之间通过消息通道进行通讯,CSP模型关注消息发送的载体,即消息管道,而Actor关注的是内部的状态,那么Golang中执行体对应的是goroutine,消息通道对应的是channel。

阅读全文 »
Kubernetes展望与思考之1.17初体验
9月 20 2019|

接触kubernetes两年有余,从18年初加入kubernetes社区来算,已经一年半,或许是时候写点什么。简单文章如何写好,难点文章如何写透,或许是一种学问,打算推一个系列:《Kubernetes GO》算是对这两年的一个总结。

kubernetes 1.16已在前天正式发布,

kubeadm是Kubernetes官方提供的用于快速安装Kubernetes集群的工具,其中kubespray比较适合较大规模的集群部署,*步骤,为可选操作,该文章主要介绍,以下内容:

  • kubernetes编译
  • kubernetes部署
  • kubernetes测试(待续)

下面我们看看如何编译及部署,在使用kubeadm部署前,需要编译以下镜像及执行文件,下面我们以v1.17.0-alpha.0版本为例:

  1. 通过关注右侧公众号,输出1.17a 获取下面的基础镜像
    其中prepare.tgz为编译基础镜像,117alpha.tgz为v1.17.0-alpha.0所需镜像及二进制文件

  2. golang 1.12.9+

  3. ip、iptables、ipset、mount、nsenter、ebtables、ethtool, socat, tc、touch、conntrack、ipvsadm、jq、sysstat、curl、libseccomp 等命令行

阅读全文 »
Kubernetes集群之路(一)TLS证书配置
3月 26 2018|

Kubernetes是Google开源的容器化集群管理系统,其提供的应用部署、扩展、服务发现等机制对于微服务化架构应用有着十分重要的作用。

本系列文章基于以下版本来讲述如何使用二进制方式安装Kubernetes集群顺便讲述下踩坑的心路历程:

  • Kubernetes version: v1.10
  • System: CentOS Linux 7
  • Kernel: Linux 3.10.0

Kubernetes系统的各个组件需要使用TLS证书对其通信加密以及授权认证,所以在部署之前我们需要先生成相关的TLS证书以便后续操作能够顺利进行。

阅读全文 »
lua读取redis数据的null判断
1月 26 2018|

最近在配合移动端调试的时候,被抓去debug一个在清除redis缓存之后才会出现的网关错误。于是打开服务器上的log定位到类似错误:

1
[error] 7#7: *12030 lua entry thread aborted: runtime error: /data/share/apps/lua/access_check.lua:133: bad argument #1 to 'decode' (string expected, got userdata)

该段代码的主要作用是在openrestylua读取redis中数据并解码为json

1
2
3
4
5
6
7
8
local access_token = redis_client:read_by_key(token_key)
if access_token == nil then
-- do something...
return false
end

local obj_token = cjson.decode(access_token)
-- do something

通过查询资料得知原因:lua读取redis数据返回结果为空时,返回的结果不是nil而是userdata类型的ngx.null


阅读全文 »
聊聊Mybatis Update操作返回值
9月 06 2017|

后端的数据持久化使用的是 Mybatis ,在做高并发下账户增减余额的时候,打算使用乐观锁来解决这个问题。在获取update操作的返回值时遇到了一个问题,似乎 Mybatis 进行 update 操作得到的 int 返回值并不是影响的行数。这下就尴尬了。

一般而言,我们知道当我们使用 Mybatis 在 mapper 接口中定义 insert delete 等操作,定义一个 int 类型的返回值,通过该值是否为 0 来判断数据库中受影响的行数进而判断操作是否成功。

阅读全文 »
Gradle、Maven项目相互转换
8月 21 2017|

在开发Android项目的时候,使用的是Gradle构建工具,喜欢它的灵活和方便,在转向Java后端开发的时候更多时候使用的是Maven构建工具,然而看着漫天的尖括号,心里实在是难受。虽然只是一个构建工具,本着折腾的心,我还是更认可和看好Gradle。然而很多时候你的队友并没有习惯去使用或者快速熟悉Gradle构建工具,那么这个时候就需要将Gradle项目转换为Maven项目了,或者将Maven项目转换为Gradle项目了。

阅读全文 »
About Me
-
Hello, my name is Zouyee.
I'm a programmer from SUZHOU, work on CloudNative.
advertising
Instagram Feed
  • | and every tear is a waterfall |
  • | the space in which we're traveling | by my @alex_pottery_art
  • | up&up |
  • | Friday candy | #ihavethisthingwithfloors
  • | in my place in my place |
  • | just the two of us | #kat_windows
  • | be colorful |
  • | when i grow up |
Facebook feed

Whey yours maxshop theme is not work true and yours support dont help us ... See MoreSee Less

View on Facebook
Video
ad Unit
0%