您当前的位置:首页 > 互联网教程

为什么go语言开发docker

发布时间:2025-05-23 08:29:29    发布人:远客网络

为什么go语言开发docker

一、为什么go语言开发docker

1、部署简单。Go编译生成的是一个静态可执行文件,除了 glibc外没有其他外部依赖。这让部署变得异常方便:目标机器上只需要一个基础的系统和必要的管理、监控工具,完全不需要操心应用所需的各种包、库的依赖关系,大大减轻了维护的负担。这和 Python有着巨大的区别。由于历史的原因,Python的部署工具生态相当混乱【比如 setuptools, distutils, pip, buildout的不同适用场合以及兼容性问题】。官方 PyPI源又经常出问题,需要搭建私有镜像,而维护这个镜像又要花费不少时间和精力。

2、并发性好。Goroutine和 channel使得编写高并发的服务端软件变得相当容易,很多情况下完全不需要考虑锁机制以及由此带来的各种问题。单个 Go应用也能有效的利用多个 CPU核,并行执行的性能好。这和 Python也是天壤之比。多线程和多进程的服务端程序编写起来并不简单,而且由于全局锁 GIL的原因,多线程的 Python程序并不能有效利用多核,只能用多进程的方式部署;如果用标准库里的 multiprocessing包又会对监控和管理造成不少的挑战【我们用的 supervisor管理进程,对 fork支持不好】。部署 Python应用的时候通常是每个 CPU核部署一个应用,这会造成不少资源的浪费,比如假设某个 Python应用启动后需要占用 100MB内存,而服务器有 32个 CPU核,那么留一个核给系统、运行 31个应用副本就要浪费 3GB的内存资源。

3、良好的语言设计。从学术的角度讲 Go语言其实非常平庸,不支持许多高级的语言特性;但从工程的角度讲,Go的设计是非常优秀的:规范足够简单灵活,有其他语言基础的程序员都能迅速上手。更重要的是 Go自带完善的工具链,大大提高了团队协作的一致性。比如 gofmt自动排版 Go代码,很大程度上杜绝了不同人写的代码排版风格不一致的问题。把编辑器配置成在编辑存档的时候自动运行 gofmt,这样在编写代码的时候可以随意摆放位置,存档的时候自动变成正确排版的代码。此外还有 gofix, govet等非常有用的工具。

4、执行性能好。虽然不如 C和 Java,但通常比原生 Python应用还是高一个数量级的,适合编写一些瓶颈业务。内存占用也非常省。

二、ios的app是一个个docker为什么反而比安卓流畅

1、Android没有iOS流畅的根本的原因是,iOS的UI渲染采用实时优先级,而Android的UI渲染遵循传统电脑模式的主线程普通优先级。

2、通俗点说就是iOS对屏幕反应的优先级最高,用户只要触摸屏幕,系统就会最优先处理屏幕显示这个层级,马上给出动画效果,然后才处理媒体、服务、核心的架构。

3、而安卓则是追求进程优先,触摸屏幕后的手机屏幕显示和动画效果放在比较后的优先级。同样打开相同的网页,Android手机就会直接将整个网页全部加载同时渲染HTML,这无疑就增加了处理器的压力。因此对于Android来说,一个高效的双核处理器是很重要的。

4、在iOS中UI渲染过程具有绝对的优先等级,当用户接触到iPhone的触摸屏后,iOS中所有的进程都将停止,UI线程拦截了所有的事件,系统会将所有资源用于渲染UI过程,以保证用户界面的实时渲染优先级。

5、而在Android系统中UI渲染过程的优先级别却没有那么高,也就是说当你触摸Android手机屏幕的时候,系统后台的程序并没有停止,仍然在继续运行之中,比如下载和查收短信,这样系统UI获得的资源就不够,这就是Android系统不流畅的原因。

6、安卓手机的后台是真后台,像PC一样,将应用保留在RAM中,当使用HOME键退出应用时,程序实际上并没有完全退出,而是被系统挂在了后台,为何我们关掉了聊天软件依然能够收到消息通知,因为它常驻系统内存。包括平时收到的一些垃圾广告推送,也是因为后台有程序运行。

7、所以这就导致了一个现象,从内存使用上来看,安卓刚开机时内存使用很低,若不进行清理内存操作,正常使用一天,内存占用会达到75%以上。而内存占用越高,使用起来流畅度就会越低,所以安卓机器需要更大的RAM来提升用户体验。

8、而iOS呢,其实是采用的伪后台,当用户HOME键退出应用时,iOS其实关闭了程序,只保留应用的图像入口,只会默认将应用的最后的运行数据记录在RAM中。

9、之所以iOS也能收到推送,是因为当用户从应用中选择开启推送之后,系统会增加一些进程,这些进程会从苹果服务器接收信息,然后再通过服务器发给用户,苹果服务器在这里是起到了中转的作用。而正是因为有了这一系列的机制,所以即便iPhone的配置相比于同类安卓机低了很多,但是iOS还是会给人更加流畅的感觉。

10、iPhone执行程序的效率比安卓机高

11、另外,安卓系统的编程语言是Java,特点是通用性强,效率低。而iOS的则为Objective-C,专一性强,效率高。

12、iOS系统本身优化得很好,而且程序也是直接执行,所以效率很高。而安卓系统是通过Java虚拟机来执行,系统需要占用大量内存来换取执行速度,也就是要绕了个大圈才执行程序,所以效率低很多。

13、由于iOS的封闭性,App Store里面的App都是在iPhone等产品上执行,硬件利用效率非常高,而且分辨率大小,硬件的更新等等参数也比较稳定,优化工作也容易进行,因而iPhone上的App和硬件结合程度比安卓高很多。

14、安卓手机的硬件配置一样天天变,开发者也不可能针对所有的机器型号进行开发,只能在比较主流的机器上进行测试并保证运行流畅,所以很多国产中低端安卓手机很难得到流畅的使用体验。

三、docker容器的基本概念

1.Docker是一个开源的应用容器引擎,基于 Go语言并遵从 Apache2.0协议开源。

Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone的 app),更重要的是容器性能开销极低。

Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

1、快速,一致地交付您的应用程序

Docker允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。

容器非常适合持续集成和持续交付(CI/ CD)工作流程,请考虑以下示例方案:

您的开发人员在本地编写代码,并使用 Docker容器与同事共享他们的工作。

他们使用 Docker将其应用程序推送到测试环境中,并执行自动或手动测试。

当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。

测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

Docker是基于容器的平台,允许高度可移植的工作负载。Docker容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务或混合环境中运行。

Docker的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

3、在同一硬件上运行更多工作负载

Docker轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。