微服务docker数据库(基于docker的微服务架构)

程序开发 28
本篇文章给大家谈谈微服务docker数据库,以及基于docker的微服务架构对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 为什么在微服务架构下,服务网关和数据库不能部署在虚拟机上 最近开发了一基于springcloud的微服务架构的门户项目,因为客户对系统性能有要求,所以楼主对系统的一些api接口进行了大量压力测试。在压测过程中,发现接口的性能瓶颈之一是服务网关和数据库部署在虚机上,所以本文将分享内容分为两部分

本篇文章给大家谈谈微服务docker数据库,以及基于docker的微服务架构对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

为什么在微服务架构下,服务网关和数据库不能部署在虚拟机上

最近开发了一基于springcloud的微服务架构的门户项目,因为客户对系统性能有要求,所以楼主对系统的一些api接口进行了大量压力测试。在压测过程中,发现接口的性能瓶颈之一是服务网关和数据库部署在虚机上,所以本文将分享内容分为两部分

性能压测思路是从软硬件负载 f5,nginx,到容器化平台k8s、docker、zuul网关,再到数据存储es、mysql、mongodb、redis,进行全面测试。

性能压测汇总

部分接口压测结果

其中值得关注的是,用一台zuul网关节点和一个业务节点压测空接口,发现一个有意思现象:

空接口压测不走zuul,一个业务节点tps能达到 32000, 走zuul网关,一个业务节点空接口tps只有11000,性能损耗64%。

当时就感觉zuul网关在我心中高大的形象碎了一地,但是没办法,性能不达标必须要优化。所以楼主查了很多资料,也问过一些docker和k8s的容器化平台大牛,总结出两点经验:

所以楼主向公司申请物理机,继续性能压测,当然这不是重点,重点是接下来要讲的:为什么服务网关和数据库不能部署到虚拟机上 。

虚拟机的特点

io开销

我们知道,不管虚机上部署了多少个应用,一旦涉及到数据的存储,如果采用虚机部署数据库,会带来不必要的网络io开销。因为虚拟机在调度大量物理的cpu和内存、特别是磁盘IO时,必须经过虚拟机和物理机两层网络io读写开销操作,是非常耗系统性能的。

一般情况下,使用虚拟机部署应用,其性能衰减约20%左右,这不是优化代码能解决的。

共享物理机资源

因为虚拟机在cpu资源、网络等方面共享物理机资源,虚拟机之间会存在竞争物理机资源,造成程序不稳定情况。

docker容器部署

更要命的是,如果数据库和zuul网关部署到容器(实质也是虚拟机)里,那么网络io读写变成docker(虚拟机)到虚机,再到物理机三层访问,无形之中又增加了io读写性能开销。尤其是对于请求吞吐量要求很高的服务网关zuul,是不能容忍的。

所以虚机对于IO密集型以及对延迟要求很高的业务场景不合适。

另外,早期的时候,作为一名架构师需要尽早的规划好服务网关和数据库的物理部署方式以及软硬件性能要求。

如何规划基于docker的微服务架构技术栈

【编者的话】有些开发者可能还是不明白Docker对自己到底有多大的用处,因此翻译Docker个人用例这篇文章中来介绍Docker在普通开发者开发过程中的用例。Docker如今赢得了许多关注,很多人觉得盛名之下其实难副,因为他们仍然搞不清Docker和普通开发者到底有什么关系。许多开发者觉得Docker离自己很远,Docker是生产环境中的工具,和自己无关。我也是花了很长时间才想清楚作为普通开发人员如何在自己的开发中使用Docker。坦率地说,我仍处在学习的过程中。这篇文章提供了一个Docker用例列表,我希望它能更好地帮助你理解Docker并引发你的思考。本文只是描述Docker在普通开发者日常的应用,并不提供完整的解决方案。在介绍用例之前,我希望你能先记住这句话:“Docker是一个便携的应用容器”。你可以不知道Docker所说的的“便携式容器”到底是什么意思,但是你必须清楚Docker在日常中能带来非常大的效率提升。当你需要在容器内运行自己的应用(当然可以是任何应用),Docker都提供了一个基础系统镜像作为运行应用时的基础系统。也就是说,只要是Linux系统上的应用都可以运行在Docker中。可以在Docker里面运行数据库吗?当然可以。可以在Docker里面运行Node.js网站服务器吗?当然可以。可以在Docker里面运行API服务器吗?当然可以。Docker并不在乎你的应用程序是什么、做什么,Docker提供了一组应用打包、传输和部署的方法,以便你能更好地在容器内运行任何应用。下面的例子我自己经常使用,当然你有更好的案例也可以分享给我。尝试新软件对开发者而言,每天会催生出的各式各样的新技术都需要尝试,然而开发者却不太可能为他们一一搭建好环境并进行测试。时间非常宝贵,正是得益于Docker,让我们有可能在一条或者几条命令内就搭建完环境。Docker有一个傻瓜化的获取软件的方法,Docker后台会自动获得环境镜像并且运行环境。并不仅仅是新技术环境搭建用得到Docker。如果你想快速在你的笔记本上运行一个MySQL数据库,或者一个Redis消息队列,那么使用Docker便可以非常容易地做到。例如Docker只需要一条命令便可以运行MySQL数据库:dockerrun-d-p3306:3306tutum/mysql。译者注:虽然使用命令也能非常快地安装MySQL数据库,但是当用到最新的技术或者非常复杂的技术时,使用Docker便会是个非常好的选择,例如Gitlab,普通用户大概需要一天的时间去搭建Gitlab平台,而Docker则只需要一条命令。进行演示现在我经常需要在周末用自己开发的成果对客户活着别人做一两个演示。搭建演示环境的过程非常麻烦。现在我发现Docker已经成为我演示这些工具的最合理的方式。同时,对于客户来说,我可以直接将Docker镜像提供给他们,而不必去做任何环境配置的工作,工作的效果也会和在他们演示中所看到的一模一样,同时不必担心他们的环境配置会导致我们的产品无法运行。避免“我机器上可以运行”无论是上一篇介绍的企业部署Docker还是本文的个人Docker用例,都提到了这个情况。因为环境配置不同,很多人在开发中也会遇到这个情况,甚至开发的软件到了测试人员的机器上便不能运行。但这都不是重点。重点是,如果我们有一个可靠的、可分发的标准开发环境,那么我们的开发将不会像现在这么痛苦。Docker便可以解决这个问题。Docker镜像并不会因为环境的变化而不能运行,也不会在不同的电脑上有不同的运行结果。可以给测试人员提交含有应用的Docker镜像,这样便不再会发生“在我机器上是可以运行的”这种事情,很大程度上减轻了开发人员测试人员互相检查机器环境设置带来的时间成本。另一个Docker可以发挥用处的地方是培训班。除了Docker容器的隔离性之外,更能体会到Docker优势的地方在于环境搭建。培训班的新手每个人都要在环境搭建上花费很多时间,但是如果在这里应用到Docker的话,那么我们只需要把标准的运行环境镜像分发下去,然后就可以开始上课了。使用Docker和使用虚拟机一样简单,但是Docker要更方便、更轻量级。同时,我们也可以告诉学员:“在培训的同时,我们还将学到当下最流行的技术——Docker”,这种双赢的结局,何乐而不为呢。学习Linux脚本当然这个原因看起来可能很奇怪,但是对不不熟悉Linux操作系统和Shell脚本的人来说,确实是一个好机会。即便本文并不是在讲Linux,Linux的重要度仍然不言而喻。如果你用的是Windows,那么我给你一个建议:从云主机提供商那儿租用一台云主机:我推荐使用CoreOS系统的云主机。虽然这样并不会让你成为专业的Linux运维,但是可以让你快速地学到Linux基础知识,爱上命令行操作,并且慢慢开始熟悉和欣赏Linux。更好地利用资源虚拟机的粒度是“虚拟出的机器”,而Docker的粒度则是“被限制的应用”,相比较而言Docker的内存占用更少,更加轻量级。对我来说这是Docker的一个优势:因为我经常在自己电脑中运行多个Docker应用,使用Docker比使用虚拟机更加简单,方便,粒度更细,也能持续地跟踪容器状态。为微服务定制如果你一直在关注科技新闻的话,那么你应该听说过“微服务(Microservices)”的概念。Docker可以很好地和微服务结合起来。从概念上来说,一个微服务便是一个提供一整套应用程序的部分功能,Docker便可以在开发、测试和部署过程中一直充当微服务的容器。甚至生产环境也可以在Docker中部署微服务。在云服务提供商之间移植大多数的云主机提供商已经全面支持Docker。对于开发人员来说,这表示你可以很方便地切换云服务提供商,当然也可以很方便地将你本地的开发环境移动到云主机上,不需要本地上配置一次运行环境、在云主机上还配置一次运行环境。全面部署Docker(DockerhereandDockerthere)作为标准运行环境可以极大地减轻应用上线时的工作量和产生BUG。

dockerphp导入文件到数据库

进入docker的mysql容器。

进入容器导出数据,首先执行dockerps,找到mysql容器的name,然后执行dockerexec-itmysql/bin/bash,进入容器,执行命令whereismysql,找到mysql的运行路径,我这里是:/usr/local/mysql/bin,用cd进入cd/usr/local/mysql/bin。请注意,这里的路径是指docker容器内的路径,跟您的宿主机路径没有关系,执行导出命令mysqldump-u用户名-p数据库名保存文件.sql,输入密码后基本导出成功,请注意,保存文件的路径要设置在volumes下面,即/var/lib/mysql/下,随后输入exit退出容器内部,回到宿主机上,我们就能够找到导出的数据文件了,如果您要导出csv格式的话,将mysqldump的那句命令改为:mysql-u用户名--password=密码--database=数据库名--execute='SELECT`FIELD`,`FIELD`FROM`TABLE`LIMIT0,10000'-X保存文件.sql即可。

docker的作用是:1、更好地利用资源,2、为微服务定制,3、在云服务提供商之间方便移植,4、方便利用API端,5、便于技术的创新。

微服务为什么一定要用Docker?

早在2013年的时候,docker就已经发行,然而那会还是很少人了解docker。一直到2014年,Martin Fowler提出了微服务的概念,两个不相干的技术终于走在了一起,创造了今天的辉煌!

近几年来,很多互联网关系开始跟风,构建docker+微服务的架构体系。然而,根据笔者观察发现,有些童鞋在使用过程中,只是会用,而根本不了解为什么使用docker,反正对他们来说,公司让用就用!而某些公司呢,虽然用上了docker,然而运维方式并没有发生改变,白白浪费了docker的大好性能

过去:曾记得12年那会,部门要上一个项目。那会,我是这么干的。直接去线上服务器,拷贝一个tomcat,然后改端口号,然后部署应用到webapps文件夹下,重启就好。而且我可以摸着良心说,现在还有很多传统企业是这么做的。

那么这么做的缺点?

很明显,应用之间相互影响。一个应用出现问题,该应用把线程池给拖垮了,这个服务器上的其他应用一起凉凉。一个大型应用拆分为几十个微服务,分别交由不同的团队开发,不同团队之间水平参差不齐。如果还采用这种部署方式,你的应用和某个坑爹团队的应用部署在了同一台服务器上,至于结果,我相信你懂的。

现在:用上了docker容器后,将Docker可以将我们的应用程序打包封装到一个容器中,该容器包含了应用程序的代码、运行环境、依赖库、配置文件等必需的资源。容器之间达到进程级别的隔离,在容器中的操作,不会影响道宿主机和其他容器,这样就不会出现应用之间相互影响的情形!

如何使用Node.js和Docker构建高质量的微服务

使用Node.js和Docker构建高质量的微服务:

通过实例化一个MongoClient对象连接MongoDB数据库是最常用也是最佳的方式。 创建MongoClient对象实例的语法:

MongoClient( server, options );

server : 一个serverd对象;

options : 数据库连接选项;

关于微服务docker数据库和基于docker的微服务架构的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

微服务docker数据库 docker数据库数据放image里面还是外面docker连接数据库docker访问外部数据库docker mysql 初始化数据库docker部署web和数据库docker容器连接数据库docker mysql 备份数据库docker mysql导入数据库docker访问宿主机数据库数据库放在docker好吗
扫码二维码