如何实现 Docker 与分布式数据库结合

如何实现 Docker 与分布式数据库结合,第1张

那么Docker是什么呢

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。

这是对Docker的一个官方解释,简单说,有两个部分:

1) 对于应用程序,曾经我们需要为了不同的系统专门的调整应用程序的代码或者是构造相应的依赖包驱动等等,大大增加了开发量以及开发的难度。现在,Docker向不同的应用程序,提供了一个统一的环境。

2) 对于服务器,为了支持不同版本的应用,曾经可能需要在物理机上安装多个版本或者不同的GuestOS或者说虚拟机。这就大大占用了物理机的性能,影响了最终程序的表现,提高了资源的成本。

你问的这个架构方式,是目前最典型、最常见的多层架构。

举一个最简单的例子:

假设某公司要部署一个办公自动化系统(OA),系统是采用的ASPNET开发的,数据库是SQLServer2005。该公司有2台Windows2008服务器,其中一台A上安装数据库SQLServer2005,另外一台B上安装OA系统。公司的员工通过浏览器来访问位于服务器B上的OA系统。

分布式数据有不同的理论支撑,TiDB官方社区(AskTUG)

目前国产数据排名靠前的可以了解下TiDB

水平d性扩展

通过简单地增加新节点即可实现TiDB的水平扩展,按需扩展吞吐或存储,轻松应对高并发、海量数据场景。

分布式事务

TiDB100%支持标准的ACID事务。

真正金融级高可用

相比于传统主从(M-S)复制方案,基于Raft的多数派选举协议可以提供金融级的100%数据强一致性保证,且在不丢失大多数副本的前提下,可以实现故障的自动恢复(auto-failover),无需人工介入。

开始动手之前 你需要了解 NET Remoting 技术的基本理论 熟悉分布式数据库原理 熟练掌握ADO NET 并熟悉VS NET的开发环境 下面仅就这几个方面做些简单的介绍 Remoting 一种分布式处理方式 也可将它看作是D的一种升级 它改善了很多功能 并极好的融合到 Net平台下 NET Remoting 提供了一种允许对象通过应用程序域与另一对象进行交互的框架 在Remoting中是通过通道(channel)来实现两个应用程序域之间对象的通信的 首先 客户端通过Remoting 访问通道以获得服务端对象 再通过代理解析为客户端对象 这就提供一种可能性 即以服务的方式来发布服务器对象 远程对象代码可以运行在服务器上(如服务器激活的对象和客户端激活的对象) 然后客户端再通过Remoting连接服务器 获得该服务对象并通过序列化在客户端运行 在Remoting中 对于要传递的对象 设计者除了需要了解通道的类型和端口号之外 无需再了解数据包的格式 但必须注意的是 客户端在获取服务器端对象时 并不是获得实际的服务端对象 而是获得它的引用 这既保证了客户端和服务器端有关对象的松散耦合 同时也优化了通信的性能 分布式数据库系统 就其本质而言 分布式数据库系统的数据在逻辑上是统一的 而在物理上却是分散的 与集中式数据库相比它有如下主要优点 · 解决组织机构分散而数据需要相互联系的问题 · 均衡负载 负载在各处理机间分担 可避免临界瓶颈 · 可靠性高 数据分布在不同场地 且存有多个副本 即使个别场地发生故障 不致引起整个系统的瘫痪 · 可扩充性好 当需要增加新的相对自主的组织单位时 可在对当前机构影响最小的情况下进行扩充 ADO NET 分布式数据库系统虽然有诸多优点 但它同时也带来了许多新问题 如 数据一致性问题 数据远程传递的实现 通信开销的降低等 这使得分布式数据库系统的开发变得较为复杂 幸运的是 微软的 NET开发环境为我们提供了C#开发语言和ADO NET数据访问模型 结合两者来开发分布式数据库系统能够大大简化开发工作 ADO NET以XML为核心 是 Net数据库应用程序的解决方案 它使用离线数据结构 数据源中的数据被缓存到数据集(DataSet)对象中 用户无须锁定数据源 数据以XML格式保存 在分布式数据库系统中 很可能出现多个用户同时访问和修改数据的情况 因此 对于分布式数据库系统 数据一致性是不可或缺的 ADO NET通过使用乐观一致性方案来控制数据一致性(实际上DataSet对象被设计成支持使用乐观一致性控制机制) 即数据行只有在数据库中真正被更新时才会被锁定 而在悲观一致性方案中 数据行在从被提取出来到在数据库中更新这段时间内一直被锁定 因此 使用ADO NET能够在更少的时间内响应数量巨大的用户 另外 在分布式数据库系统中 还会经常遇到当用户修改自从提取出来以来已经被修改的行时 违反一致性原则 对此问题ADO NET也作了很好地解决 即使用DataSet对象为每一条修改过的记录维护两个版本 原始版本和更新版本 在更新的记录被写回数据库之前 先要把数据集中记录的原始版本与数据库中的当前版本进行比较 如果两个版本匹配 就在数据库中更新记录 否则 就会出现违反一致性原则的错误 下面开始程序实现 第 章 系统总体结构 总体结构图系统实现需要部署服务器端的远程对象(即一个DbServerLibrary dll) 服务器端要注册通道和该远程对象 客户端要实现一个本地查询的服务器 同时根据SQL解析的结果向各个服务器发送命令 并将结果显示在客户端界面 服务器端可以接受并显示相应的命令 关键组件结构图系统结构中关键的组件有远程对象 和本地服务器 实现的功能基本一致 下面以远程对象为例 说明组件的实现 远程对象在服务器端解决方案下的库文件中声明 通过服务器端进行注册 客户端通过TCP通道与服务器端远程对象通信 实现数据集的查询和传输 主要的数据成员有 SqlConnection(SQL Server数据库的连接对象) SqlCommand (SQL命令对象) SqlDataAdapter(数据适配器 填充数据集)组件——DbServerLibrary: 第 章 数据字典结构 因时间仓促 未实现数据字典 所有实验要求的SQL经过解析后 直接通过代码判断 向相应场地发送命令 第 章 代码结构 代码分为三部分 远程对象 服务器端代码和客户端代码 其中 远程对象部署在各个服务器端 客户端除了实现查询命令的解析和传送外外 还有一个本地服务器 进行相应的本地查询 远程对象代码 using System;using System Runtime Serialization;using System Data;using System Data SqlClient;using System Windows Forms;namespace DbServerLibrary{[SerializableAttribute]//It is very important for Remoting Datapublic class DbServer : MarshalByRefObject{private string connStr;private string clientSql;public SqlConnection sqlConn;public SqlCommand sqlComm;public SqlDataAdapter sqlAdapter;public void GetClientSql(string sql){if(clientSql != null){clientSql = null;}clientSql = sql;MessageBox Show(clientSql);}public DbServer(){//LocalData InitializeconnStr = Data Source = localhost;Initial Catalog=DDB;User ID=sa;Password=; ;sqlConn = new SqlConnection(connStr);}public DataSet GetDataSet() // 执行select{DataSet ds = new DataSet();if (sqlComm != null){sqlComm = null;}if(sqlConn State == ConnectionState Closed){sqlConn Open();}try{sqlComm = new SqlCommand();sqlComm Connection = sqlConn;sqlComm CommandText = clientSql;sqlComm CommandType = CommandType Text;sqlAdapter = new SqlDataAdapter();sqlAdapter SelectCommand = sqlComm;sqlAdapter Fill(ds);}catch(SqlException ex){MessageBox Show(ex Message);}return ds;}public int ExecuteSql()  //执行insert和delete{int affectedNumber;if (sqlComm != null){sqlComm = null;}if(sqlConn State == ConnectionState Closed){sqlConn Open();}try{sqlComm = new SqlCommand();sqlComm Connection = sqlConn;sqlComm CommandType = CommandType Text;sqlComm CommandText = clientSql;affectedNumber = sqlComm ExecuteNonQuery();return affectedNumber;}catch(SqlException ex){MessageBox Show(ex Message);return ;}}}}服务器端代码 private void frmSupplierServer_Load(object sender System EventArgs e){TcpChannel chan = new TcpChannel( );ChannelServices RegisterChannel(chan);//注册提供服务的远程对象 RemotingConfiguration RegisterWellKnownServiceType(typeof(DbServerLibrary DbServer) DbServer WellKnownObjectMode Singleton);}客户端代码 解析SQL SqlParse csnamespace SupplierClient{public class SqlParse{//得到sql语句的类型public string GetSqlType(string sqlText) //type of SQL statements{}//得到select语句要查询的表名public string GetSelectTableName(string sqlText){}//得到select语句中的where子句public string GetWhereClause(string sqlText){ lishixinzhi/Article/program/ASP/201311/21754

很多组织机构慢慢的在不同的服务器和地点部署SQL Server数据库——为各种应用和目的——开始考虑通过SQL Server集群的方式来合并。

将SQL Server实例和数据库合并到一个中心的地点可以减低成本,尤其是维护和软硬件许可证。此外,在合并之后,可以减低所需机器的数量,这些机器就可以用于备用。

当寻找一个备用,比如高可用性的环境,企业常常决定部署Microsoft的集群架构。我常常被问到小的集群(由较少的节点组成)SQL Server实例和作为中心解决方案的大的集群哪一种更好。在我们比较了这两个集群架构之后,我让你们自己做决定。

什么是Microsoft集群服务器

MSCS是一个Windows Server企业版中的内建功能。这个软件支持两个或者更多服务器节点连接起来形成一个“集群”,来获得更高的可用性和对数据和应用更简便的管理。MSCS可以自动的检查到服务器或者应用的失效,并从中恢复。你也可以使用它来(手动)移动服务器之间的负载来平衡利用率以及无需停机时间来调度计划中的维护任务。

这种集群设计使用软件“心跳”来检测应用或者服务器的失效。在服务器失效的事件中,它会自动将资源(比如磁盘和IP地址)的所有权从失效的服务器转移到活动的服务器。注意还有方法可以保持心跳连接的更高的可用性,比如站点全面失效的情况下。

MSCS不要求在客户计算机上安装任何特殊软件,因此用户在灾难恢复的经历依赖于客户-服务器应用中客户一方的本质。客户的重新连接常常是透明的,因为MSCS在相同的IP地址上重启应用、文件共享等等。进一步,为了灾难恢复,集群的节点可以处于分离的、遥远的地点。

在集群服务器上的SQL Server

SQL Server 2000可以配置为最多4个节点的集群,而SQL Server 2005可以配置为最多8个节点的集群。当一个SQL Server实例被配置为集群之后,它的磁盘资源、IP地址和服务就形成了集群组来实现灾难恢复。

SQL Server 2000允许在一个集群上安装16个实例。根据在线帮助,“SQL Server 2005在一个服务器或者处理器上可以支持最多50个SQL Server实例,”但是,“只能使用25个硬盘驱动器符,因此如果你需要更多的实例,那么需要预先规划。”

注意SQL Server实例的灾难恢复阶段是指SQL Server服务开始所需要的时间,这可能从几秒钟到几分钟。如果你需要更高的可用性,考虑使用其他的方法,比如log shipping和数据库镜像。

单个的大的SQL Server集群还是小的集群

下面是大的、由更多的节点组成的集群的优点:

◆更高的可用新(更多的节点来灾难恢复)。

◆更多的负载均衡选择(更多的节点)。

◆更低廉的维护成本。

◆增长的敏捷性。多达4个或者8个节点,依赖于SQL版本。

◆增强的管理性和简化环境(需要管理的少了)。

◆更少的停机时间(灾难恢复更多的选择)。

◆灾难恢复性能不受集群中的节点数目影响。

下面是单个大的集群的缺点:

◆集群节点数目有限(如果需要第9个节点怎么办)。

◆在集群中SQL实例数目有限。

◆没有对失效的防护——如果磁盘阵列失效了,就不会发生灾难恢复。

◆使用灾难恢复集群,无法在数据库级别或者数据库对象级别,比如表,创建灾难恢复集群。

虚拟化和集群

虚拟机也可以参与到集群中,虚拟和物理机器可以集群在一起,不会发生问题。SQL Server实例可以在虚拟机上,但是性能可能会受用影响,这依赖于实例所消耗的资源。在虚拟机上安装SQL Server实例之前,你需要进行压力测试来验证它是否可以承受必要的负载。

在这种灵活的架构中,如果虚拟机和物理机器集群在一起,你可以在虚拟机和物理机器之间对SQL Server进行负载均衡。比如,使用虚拟机上的SQL Server实例开发应用。然后在你需要对开发实例进行压力测试的时候,将它灾难恢复到集群中更强的物理机器上。

集群服务器可以用于SQL Server的高可用性、灾难恢复、可扩展性和负载均衡。单个更大的、由更多的节点组成的集群往往比小的、只有少数节点的集群更好。大个集群允许更灵活环境,为了负载均衡和维护,实例可以从一个节点移动到另外的节点。

基于hadoop的分布式数据库有hbase。安装hbase除了要安装hadoop外,还要安装Zookeeper。

分布式hbase安装和分布式hadoop安装方法差不多,hbase要有master和regionserver,regionserver相当于slave,你可以在maser上面安装好hbase,然后把它拷贝到其它slave服务器,再修改一些配置

基于hadoop的分布式数据库有hbase。安装hbase除了要安装hadoop外,还要安装Zookeeper。

分布式hbase安装和分布式hadoop安装方法差不多,hbase要有master和regionserver,regionserver相当于slave,你可以在maser上面安装好hbase,然后把它拷贝到其它slave服务器,再修改一些配置

以上就是关于如何实现 Docker 与分布式数据库结合全部的内容,包括:如何实现 Docker 与分布式数据库结合、数据库分布式部署B/S架构的系统怎么实现、分布式数据库的工作原理是什么(分布式数据库的特点是什么)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9538595.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存