为了提升网站的性能,我们可以采用数据库读写分离的方案。在WTM框架中,只需要简单配置即可完成数据库读写分离操作。官方文档

       一、环境搭建

        我们这里在本地用VMware Workstation建立了2台WindowsServer2012服务器,每台服务器都安装SqlServer2017开发版数据库。由于本人电脑只有8G内存,安装2个虚拟机已经非常卡了。

服务器信息
计算机名称Sql实例名称内存硬盘ip说明
Node1Node12G60G192.168.137.128主数据库服务器
Node2Node22G60G192.168.137.129从数据库服务器

      二、主机、虚拟机通讯

        1、确定主机与虚拟机通讯是否正常。本人采用的是NAT连接方式,主机直接ping虚拟机ip是畅通的。如果不通,详细参照

        2、将2台服务器的TCP连接打开,详细参照。设置完成之后,直接用本地计算机安装的SSMS连接虚拟机中的SqlServer实例。确定2个实例都能正常连接。

      三、配置WTM项目

        在WTM生成项目,并下载。项目appsettings.json,将数据库连接字符串修改为使用账号密码登录。设置完成后启动项目,并查看Node1(192.168.137.128)数据库是否正常生成数据表。

{
      "Key": "default",
      "Value": "Server=192.168.137.128;Database=GasDataReport_db;User ID=sa;Password=000000;"
    },

      四、配置数据库主从

        在Node1(192.168.137.128)发布订阅【数据库名称GasDataReport_db】,在Node2(192.168.137.129)接收订阅【数据库名称zcfl】。完成数据库主从设置。关于这一块,详细参照

        后续会写一篇关于alwayson的博客。

      五、配置WTM读写分离

         修改项目appsettings.json,将数据库连接字符串修改为读写分离模式。

         框架会自动识别ConnectionString中以下划线+数字结尾的key值,作为只读库。

         配置文件定义了两个连接字符串,default是写库,default_1是只读库。

"ConnectionStrings": [
    {
      "Key": "default",
      "Value": "Server=192.168.137.128;Database=GasDataReport_db;User ID=sa;Password=000000;"
    },
    {
      "Key": "default_1",
      "Value": "Server=192.168.137.129;Database=zxcl;User ID=sa;Password=000000;"
    }
  ],

        六、验证是否读写分离。

           框架读写分离逻辑是,就是[HttpPost]的会走写库,其他走读库,另外可以通过[FixConnection]指定用读库还是写库。

            在HomeController里添加Test方法,并在数据完成搜索的地方打断点。

public async Task<IActionResult> Test()
        {
            var list = await DC.Set<FrameworkUserBase>().ToListAsync();
            return Json(list);//此处打断点
        }

            进入系统后访问Test方法。/Home/Test 进入断点

            在即时窗口中输入this.DC回车查看数据库连接信息。

        

        这里我们可以看到,获取数据的Sqlserver实例是Node2(192.168.137.129),zxfl数据库。

        成功完成读写分离配置。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐