go架构师需要掌握的技术?

go架构师需要掌握的技术?,第1张

1、网络工程和管理

云架构师倾向于以前的网络管理员经验,他们知道如何配置单个服务器,然后升级并开始考虑服务器的数量。由此可见,成为一名云架构师的基础是具备部署和操作不同网络类型的知识,以及通常要掌握与SDN相关的一些知识。

2、编程语言

虽然具体的细节取决于所讨论的云,但是了解流行的语言(Java、Perl、Python和C#)将涵盖云基础架构和云原生应用程序基础。建议大家还可以了解一下Go语言,这是Docker和Kubernetes所用的语言。

3、数据存储

这包括基础设施、硬件、资源调配、容量规划以及数据安全性方面的知识。比较典型的如MySQL、Redis数据库的操作和掌握。

4、Kubernetes和Docker

容器正在成为云管理和架构的重要组成部分,Kubernetes和Docker是用于构建和管理容器的两个主要工具。近年来,企业对容器技术、尤其是对Kubernetes技能的需求特别高,想要更具优势就一定要掌握Kubernetes和Docker。

5、云安全技术

随着法规越来越严格,安全性越来越成为云架构师所需掌握的一项基本技能。虽然现在越来越多的组织正在聘请单独的云安全架构师,但拥有安全方面的背景有助于端到端云安全。

除此之外,一个优秀的云计算架构师还具备良好的沟通能力、团队协作能力和领导力,还会根据市场需求不断学习提升自身技能。

学习内容包括Linux、网络工程师、Python运维、云计算、OpenStack、Doctor容器技术,同时还增加信息安全、安全防御和黑客技术。采用项目驱动教学模式,由大师级讲师全程面授教学,手把手带领学员做项目,因此毕业学员理论扎实、实战丰富,就业速度更快、求职起点更高!

从2013年起,经朋友推荐开始用Golang编写游戏登陆服务器, 配合C++做第三方平台验证 到编写独立工具导表工具GitHub - davyxu/tabtoy: 跨平台的高性能便捷电子表格导出器 以及网络库GitHub - davyxu/cellnet: 简单,方便,高效的Go语言的游戏服务器底层 最终使用这些工具及库编写整个游戏服务器框架, 我的感受是很不错的

细节看来, 有如下的几个点:

语言, 库

Golang语言特性和C很像, 简单, 一张A4纸就能写完所有特性 你想想看, C++到了领悟阶段, 也只用那几个简单特性, 剩下的都是一大堆解决各种内存问题的技巧 而Golang一开始就简单, 何必浪费生命去研究那一大堆的奇技*巧呢

Golang的坑只有2个:1 interface{}和nil配合使用, 2 for循环时, 将循环变量引入闭包(Golang, Lua, C#闭包变量捕获差异) 完全不影响正常使用, 复合语言概念, 只是看官方后面怎么有效的避免

用Golang就忘记继承那套东西, 用组合+接口

用Golang服务器如何保证解决游戏服务器存盘一致性问题 stop the world是肯定的, 但是Golang可以从语言层并发序列化玩家数据, 再通过后台存盘

channel是goroutine虽然是Golang的语言特性 但是在编写服务器时, 其实只有底层用的比较多

Golang的第三方库简直多如牛毛, 好的也很多

不要说模板了, C#的也不好用, 官方在纠结也不要加, 使用中, 没模板确实有点不方便 用interface{}/反射做泛型对于Golang这种强类型语言来说,还是有点打脸

运行期

Golang和C++比性能的话, 这是C++的优势, Golang因为没虚拟机, 只有薄薄的一层调度层 因此性能是非常高的, 用一点性能牺牲换开发效率, 妥妥的

16版后的GC优化的已经很好了, 如果你不是高性能,高并发Web应用, 非要找出一堆的优化技巧的话 只用Golang写点游戏服务器, 那点GC损耗可以忽略不计

和其他现代语言一样, 崩溃捕捉是标配功能, 我用Golang的服务器线上跑, 基本没碰到过崩溃情况

热更新: 官方已经有plugin系统的提交, 跨平台的 估计很快就可以告别手动cgo做so热更新

开发, 调试, 部署, 优化

LiteIDE是我首选的Golang的IDE, 虽然有童鞋说B格不高 但这估计实在是找不到缺点说了, 别跟我说Visual Studio, 那是宇宙级的

曾经听说有人不看好Golang, 我问为啥: 说这么新的语言, 不好招人,后面打听到他是个策划 好吧

真实情况是这样的: Golang对于有点编程基础的新人来说, 1周左右可以开始贡献代码 老司机2~3天

开发效率还是不错的, 一般大的游戏功能, 22人一周3~4个整完 这换C++时代, 大概也就1~2个还写不完 对接服务器sdk的话, 大概1天接个10多个没问题

Golang自带性能调优工具, 从内存, CPU, 阻塞点等几个方面直接出图进行分析, 非常直观, 可以参考我博客几年前的分析: 使用Golang进行性能分析(Profiling)

Golang支持交叉编译, 跨平台部署, 什么概念 linux是吧 不问你什么版本, 直接windows上编译输出一个elf, 甩到服务器上开跑不超过1分钟时间

前段时间在golang-China读到这个贴:

个人觉得golang十分适合进行网游服务器端开发,写下这篇文章总结一下。

从网游的角度看:

要成功的运营一款网游,很大程度上依赖于玩家自发形成的社区。只有玩家自发形成一个稳定的生态系统,游戏才能持续下去,避免鬼城的出现。而这就需要多次大量导入用户,在同时在线用户量达到某个临界点的时候,才有可能完成。因此,多人同时在线十分有必要。

再来看网游的常见玩法,除了排行榜这类统计和数据汇总的功能外,基本没有需要大量CPU时间的应用。以前的项目里,即时战斗产生的各种伤害计算对CPU的消耗也不大。玩家要完成一次操作,需要通过客户端-服务器端-客户端这样一个来回,为了获得高响应速度,满足玩家体验,服务器端的处理也不能占用太多时间。所以,每次请求对应的CPU占用是比较小的。

网游的IO主要分两个方面,一个是网络IO,一个是磁盘IO。网络IO方面,可以分成美术资源的IO和游戏逻辑指令的IO,这里主要分析游戏逻辑的IO。游戏逻辑的IO跟CPU占用的情况相似,每次请求的字节数很小,但由于多人同时在线,因此并发数相当高。另外,地图信息的广播也会带来比较频繁的网络通信。磁盘IO方面,主要是游戏数据的保存。采用不同的数据库,会有比较大的区别。以前的项目里,就经历了从MySQL转向MongoDB这种内存数据库的过程,磁盘IO不再是瓶颈。总体来说,还是用内存做一级缓冲,避免大量小数据块读写的方案。

针对网游的这些特点,golang的语言特性十分适合开发游戏服务器端。

首先,go语言提供goroutine机制作为原生的并发机制。每个goroutine所需的内存很少,实际应用中可以启动大量的goroutine对并发连接进行响应。goroutine与gevent中的greenlet很相像,遇到IO阻塞的时候,调度器就会自动切换到另一个goroutine执行,保证CPU不会因为IO而发生等待。而goroutine与gevent相比,没有了python底层的GIL限制,就不需要利用多进程来榨取多核机器的性能了。通过设置最大线程数,可以控制go所启动的线程,每个线程执行一个goroutine,让CPU满负载运行。

同时,go语言为goroutine提供了独到的通信机制channel。channel发生读写的时候,也会挂起当前操作channel的goroutine,是一种同步阻塞通信。这样既达到了通信的目的,又实现同步,用CSP模型的观点看,并发模型就是通过一组进程和进程间的事件触发解决任务的。虽然说,主流的编程语言之间,只要是图灵完备的,他们就都能实现相同的功能。但go语言提供的这种协程间通信机制,十分优雅地揭示了协程通信的本质,避免了以往锁的显式使用带给程序员的心理负担,确是一大优势。进行网游开发的程序员,可以将游戏逻辑按照单线程阻塞式的写,不需要额外考虑线程调度的问题,以及线程间数据依赖的问题。因为,线程间的channel通信,已经表达了线程间的数据依赖关系了,而go的调度器会给予妥善的处理。

另外,go语言提供的gc机制,以及对指针的保护式使用,可以大大减轻程序员的开发压力,提高开发效率。

展望未来,我期待go语言社区能够提供更多的goroutine间的隔离机制。个人十分推崇erlang社区的脆崩哲学,推动应用发生预期外行为时,尽早崩溃,再fork出新进程处理新的请求。对于协程机制,需要由程序员保证执行的函数不会发生死循环,导致线程卡死。如果能够定制goroutine所执行函数的最大CPU执行时间,及所能使用的最大内存空间,对于提升系统的鲁棒性,大有裨益。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » go架构师需要掌握的技术?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情