Notice: Constant WP_DEBUG already defined in /var/www/html/wordpress/wp-content/plugins/changyan/sohuchangyan.php on line 12

Notice: Constant WP_DEBUG_LOG already defined in /var/www/html/wordpress/wp-content/plugins/changyan/sohuchangyan.php on line 13

Notice: Constant WP_DEBUG_DISPLAY already defined in /var/www/html/wordpress/wp-content/plugins/changyan/sohuchangyan.php on line 14
多图 | GopherChina 第一天见闻(下)【zoues.com】 – zoues

LOADING

Follow me

多图 | GopherChina 第一天见闻(下)【zoues.com】
四月 16, 2017|DockerPaaS

多图 | GopherChina 第一天见闻(下)【zoues.com】

多图 | GopherChina 第一天见闻(下)【zoues.com】

导读:

4月15日,2017年的GopherChina大会在上海小南国花园酒店召开,我有幸作为一名“前方记者”来大会学习,本文主要是本次大会首日盛况的见闻第一部分。

首日大会由Asta谢主持,讲师来自七牛、PingCAP、有赞、阿里、CoreOS、Bilibili等诸多企业,共同为大家带来了满满干货的分享。考虑到我照片的渣效果,先贴出来官方的PPT合集址:https://github.com/gopherchina/conference/tree/master/2017

(下面的内容由于图片比较大,打开可能会有些延迟)

1
见闻 
1

Understanding Go interface

这个话题由Google的Francesc Campoy老师带来,为我们讲述了Go语言中很重要的特性Interface。值得一提的是,Francesc老师一上台就开始飚中文,一句”你好“一下子让会场的气氛活跃了起来。当然,后面Francesc老师还是用英文进行演讲。

老师首先援引了Wikipedia上对于Interface的定义:Interface是面向对象程序设计中用于不相关对象间通信用的一种协议或接口。这里面比较重要的两个关键一个是“communicate”,另一个是“unrelated objects”。(后面将用接口代替Interface)

多图 | GopherChina 第一天见闻(下)

接口就像LEGO积木,不用关心这个凹陷背面是个什么样的形状,只要有另一个凸起能够稳定地拼接,那么它们就契合得非常好。又比如Docker提供了一种标准化的打包和运行形式,这也可以看作是一种接口。

那么在Go里, 数据类型可以分为Abstrace和Concrete两类:

多图 | GopherChina 第一天见闻(下)

多图 | GopherChina 第一天见闻(下)
    从图中也能看出来, Abstract类型定义了方法集,用于描述行为。而Concrete类型定义了通过方法关联到数据的行为,用于描述内存布局。接口对应的就是方法集,那么为什么需要接口呢?原因有下:

    • 编写通用的代码

    • 隐藏设计细节

    • 检查监测点

        Go语言之父Rob Pike有这么两个经典的描述:

    多图 | GopherChina 第一天见闻(下)

    多图 | GopherChina 第一天见闻(下)

    接口用来描述的是一组行为,而interface{}可以表示任何类型。而接口设计越广,它的抽象也就越弱。通过接口可以很好地解耦依赖。比如进行测试的时候,不再需要考虑具体实现,只要测试接口是否工作正常就可以了。

    Francesc老师最后说到接口的“Super Power”是它在类型断言方面的表现,可以用来扩展行为、维持兼容性以及对错误进行分类。


    2

    NSQ重塑之路

    这个话题由杭州有赞的李文老师带来,从下面几个方面一步步展开讲述了NSQ的重塑之路:

      • 原始架构

      • 重新设计的架构

      • 新NSQ上的Jepsen测试

      • 在有赞的应用

               NSQ是Go生态里挺出名的队列组件。在有赞的应用场景里需要实现消息队列的高可用、自动平衡、有序发布和消费历史消息。现在存在的问题以及重新设计是:

        • 从Topic Channel把所有的数据拷贝到Consume Channel

        • 多份数据拷贝,浪费了很多磁盘

        • 重新设计:使用Cursor用来指示要消费的数据。

                那么优化后的Go Channel超时示意图如下:

        多图 | GopherChina 第一天见闻(下)

                重新设计的架构图如下:

        多图 | GopherChina 第一天见闻(下)

                基于此有赞实现了自动平衡,包括下面三个方面:

          • 负载因子:CPU负载、Topic PUB大小、Leaders

          • 添加/移除节点平衡

          • 手动迁移数据

                  以及实现了SmartClient。它可以周期性地刷新Topic Leader和分区,以及HA的重试(在非Leader上失败后的快速查询)以及发布策略(支持轮询和按照主键的sharding)。

                  还有按序发布,包括:在同一个分区里有序,在一个线程里向同一个节点发布相同的sharding键,以及按序一个接一个地向消费者发送消息。

                  最后是新NSQ与Kafka、RocketMQ的对比示意图:

          多图 | GopherChina 第一天见闻(下)

              

          3

          基于Go的微服务架构

          这个话题由阿里的聪心老师带来,以Spring开发者的视角进行了讲解。但由于我才疏学浅,实在没能跟上聪心老师的节奏,这块就仅仅贴出一些现场的PPT照片吧。

          多图 | GopherChina 第一天见闻(下)

          多图 | GopherChina 第一天见闻(下)

          多图 | GopherChina 第一天见闻(下)

          4

          用Go搭建Kubernetes Operator

          这个话题由CoreOS的邓洪超老师带来。一开始就举了一个非常生动的场景,假设PingCAP 黄东旭同学要做一些周边的生意,然后简单几步为他搭建一个电商服务(页面)。

          部署应用可用通过容器进行,不管是Docker(或者OCI)都提供了标准的应用打包格式,Kubernetes或Swarm则提供了资源调度、集群管理的功能。在部署的时候可能会用到数据库(比如PostgreSQL、MySQL、TiDB等)、服务发现(Etcd、Zookeeper等)、流处理(Spark、Hadoop等)、存储(Ceph、GlusterFS等)、日志(ElasticSearch等)以及监控(Prometheus等)。Operator是用来解决自动化应用运维的工具,而应用包括代码和配置两部分。

          Operator模拟一个运维人员,比如完成一些复杂的升级工作,比如:

          多图 | GopherChina 第一天见闻(下)

          Operator的原理是这样一个循环:首先观察集群的当前状态,然后分析之与期望配置之间的差异,最后以此为目标进行操作,并进入下个循环。流程如下图:

          多图 | GopherChina 第一天见闻(下)

          Etcd Operator分为Common和Advanced两部分,其中Common包含的特性有:

            • Resize

            • Upgrade

            • Backup

            Advanced包含的特性有:

              • Restore

              • TLS

              • Monitoring / Alert

              另外Operator具有的一些特点是自动化、云原生、可定制、可组合、版本控制、声明式,如下图:

              多图 | GopherChina 第一天见闻(下)


              5

              Bilibili的Go微服务实战

              这个话题由Bilibili的毛剑老师带来。毛剑老师的话题分为五个部分:

                • 梳理业务边界

                • 资源隔离部署

                • 内外网服务隔离

                • RPC框架

                • API Gateway

                首先是业务边界的梳理。在进行微服务改造前需要划分清楚权责边界,而且特别需要考虑兼容性。涉及的一些关键点有:

                  • 是序列化(GOB)

                  • 上下文管理(超时)

                  • 拦截器(鉴权、统计、限流)

                  • 服务注册(Zookeeper)

                  • 负载均衡(客户端)

                  • 统一&聚合协议

                  • errgroup并行调用

                  • 业务隔离

                  • 熔断、降级、限流等高可用

                          具体来说,高可用中的隔离包括了服务隔离、轻重隔离和物理隔离。见下图:

                  多图 | GopherChina 第一天见闻(下)

                          超时分为设置超时和合理超时。见下图:

                  多图 | GopherChina 第一天见闻(下)

                          限流包含了流量限流、资源限流、请求限流、分布式限流和接入层限流。见下图:

                  多图 | GopherChina 第一天见闻(下)

                          降级由调用链路、自动降级、手动降级三部分组成。见下图:

                  多图 | GopherChina 第一天见闻(下)

                          容错是重试容错以及熔断容错。见下图:

                  多图 | GopherChina 第一天见闻(下)

                          Bilibili的微服务中间件有基于Kafka的databus、利用MySQL 复制实现的Canal,基于Twemproxy的bilitw和由Facebook haystack实现的bfs等。

                          除此之外,团队还是搭建了配置中心,下面是配置中心服务的示意图:

                  多图 | GopherChina 第一天见闻(下)

                  以及实现了版本管理的语义化(Major.Minor.Patch)CI/CD系统,基于Docker和Mesos实现的PaaS等。CI/CD示意图如下:

                  多图 | GopherChina 第一天见闻(下)


                  2
                  感受 

                  下午五位老师的分享各有特色。印象比较深刻的是Francesc老师、邓洪超老师以及毛剑老师的分享。Francesc老师讲的内容深入浅出,唯一的问题就是我的英文水平了,严重影响了知识的接收。邓洪超老师讲的Kubernetes Operator是工作相关,但理解得不到位,需要实践才能明白。毛剑老师讲得思路非常清晰,重点突出。而李文老师和聪心老师由于我缺乏相关的背景知识和准备,听起来有点云里雾里的,但是两位老师都用心准备了分享, 感谢他们!

                          由于个人知识浅薄、能力有限,上面的整理如有错误、遗漏的地方,还请各位读者批评指正!

                          

                  3
                  加入容器时代

                  容器时代公众号的目的是希望能够传播容器技术和理念,让更多的人能够享受到这场技术革命带来的好处。虽然我们不是大牛,对容器技术生态的了解和认识也还不够深刻,但是我们乐于分享,乐于交流。不管读者的你是学生,还是工程师,甚至都不是,我们都欢迎你加入进来,可以一起写文章、翻译文章,也可以一起分享经验、聊聊踩过的那些坑!为此特意建立了一个微信群,长按识别下方二维码加入,我们以梦为马,一起前行!

                  (微信群已满,请添加k8stimes或者扫下面二维码添加好友,小助手会将您拉入群聊)

                  多图 | GopherChina 第一天见闻(下)

                  还可以关注我们的公众号,Kubernetes最新最热的姿势都在这里:

                  多图 | GopherChina 第一天见闻(下)

                  4
                  架构真经

                  《架构真经:互联网技术架构的设计原则(原书第2版)》即将震撼上市,关注容器时代公众号可以有机会获得亲笔签名图书,赶快关注!!

                  多图 | GopherChina 第一天见闻(下)

                  版权声明:任何转载需全文转载并保留来源(微信公众号容器时代),同时转载容器时代的二维码,否则视作侵权。


                  no comments
                  Share