tag 标签: 集群

相关资源
  • 所需E币: 0
    时间: 2023-12-20 15:51
    大小: 8.21KB
    今天跟大家讲一个关于体检+健康双系统的项目,这个项目用到SpringBoot+Vue3+MySQL的技术,我会带着大家一步步去实现这样的项目,希望对大家的技术有所提升。本项目包含MIS系统、体检人系统在内的前后端分离式全栈双系统作品,主流框架+最新技术,界面美观、体系完整。首先,我们先来搭建环境:大家创建轻量云主机的时候,一定要选择CentOS7.X镜像,这个版本的Linux兼容性和安全性很好,很多企业级项目都是部署在这个版本的CentOS上面。因为CentOS8.0的兼容性极差,所以强烈反对同学们使用这个版本。另外,Ubuntu在安全性上没有CentOS做得好,所以不推荐在运营环境中使用。使用虚拟机的同学,我们要给虚拟机设置好端口转发,然后在Windows电脑上面才能通过这些端口访问到Linux上面的程序。接下来我们创建Minio容器,设定的访问帐户是root,密码为abc123456,一会儿我们可以用浏览器访问Web管理画面。注意密码必须是8位以上,否则Minio容器创建出来会闪退。以下是代码实战:dockerrun-it-d--nameminio\-p9000:9000-p9001:9001\--netmynet--ip172.18.0.12-m400m\-v/root/minio/data:/data\-eTZ=Asia/Shanghai--privileged=true\--envMINIO_ROOT_USER="root"\--envMINIO_ROOT_PASSWORD="abc123456"\--envMINIO_SKIP_CLIENT="yes"\bitnami/minio:latest在src/views/front/main.vue文件中,添加这个DIV和它的子元素。@importurl('../style.less');.container{  width:1200px;  margin-left:auto;  margin-right:auto;}header{  ……  .search-container{    float:left;    margin-top:5px;    margin-left:100px;    .keyword-input{      width:400px;      margin-bottom:10px;    }    .tag{      margin-right:10px;    }  }}ElementPlus组件库的菜单控件用起来并不复杂,我们看一个简单的例子。下面的菜单是可以左右折叠的,如果变量isCollapse为true,菜单就会向左折叠。<divclass="site-wrapper"  :class="{'site-sidebar--fold':sidebar.sidebarFold}"  v-loading.fullscreen.lock="loading"element-loading-text="拼命加载中">  <nav>    ……  </nav>  <asideclass="site-sidebarsite-sidebar--dark">    <divclass="site-sidebar__inner">      <el-menu:default-active="siteContent.menuActiveName||'Home'"        :collapse="sidebar.sidebarFold":collapseTransition="false"        class="site-sidebar__menu"background-color="#263238"        active-text-color="#fff"text-color="#8a979e">        <el-menu-itemindex="Home"          @click="$router.push({name:'MisHome'})">          <el-icon>            <SvgIconname="home"class="icon-svg"/>          </el-icon>          <spanslot="title">首页</span>        </el-menu-item>        <el-sub-menuindex="组织管理"          :popper-class="'site-sidebar--'+sidebar.sidebarLayoutSkin+'-popper'">          <template#title>            <el-icon>              <SvgIconname="users_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">组织管理</span>          </template>          <el-menu-itemindex="MisDept"            v-if="proxy.isAuth(['ROOT','DEPT:SELECT'])"            @click="$router.push({name:'MisDept'})">            <el-icon>              <SvgIconname="company_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">部门管理</span>          </el-menu-item>          <el-menu-itemindex="MisRole"            v-if="proxy.isAuth(['ROOT','ROLE:SELECT'])"            @click="$router.push({name:'MisRole'})">            <el-icon>              <SvgIconname="role_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">角色管理</span>          </el-menu-item>          <el-menu-itemindex="MisUser"            v-if="proxy.isAuth(['ROOT','USER:SELECT'])"            @click="$router.push({name:'MisUser'})">            <el-icon>              <SvgIconname="user_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">用户管理</span>          </el-menu-item>        </el-sub-menu>        <el-sub-menuindex="业务管理"          :popper-class="'site-sidebar--'+sidebar.sidebarLayoutSkin+'-popper'">          <template#title>            <el-icon>              <SvgIconname="trust_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">业务管理</span>          </template>          <el-menu-itemindex="MisGoods"            v-if="proxy.isAuth(['ROOT','GOODS:SELECT'])"            @click="$router.push({name:'MisGoods'})">            <el-icon>              <SvgIconname="goods_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">体检套餐</span>          </el-menu-item>          <el-menu-itemindex="MisRule"            v-if="proxy.isAuth(['ROOT','RULE:SELECT'])"            @click="$router.push({name:'MisRule'})">            <el-icon>              <SvgIconname="rule_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">促销规则</span>          </el-menu-item>          <el-menu-itemindex="MisCustomer"            v-if="proxy.isAuth(['ROOT','CUSTOMER:SELECT'])"            @click="$router.push({name:'MisCustomer'})">            <el-icon>              <SvgIconname="customer_fill"                class="icon-svg"/>            </el-icon>            <spanslot="title">客户档案</span>          </el-menu-item>          <el-menu-itemindex="MisOrder"            v-if="proxy.isAuth(['ROOT','ORDER:SELECT'])"            @click="$router.push({name:'MisOrder'})">            <el-icon>              <SvgIconname="order_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">订单管理</span>          </el-menu-item>          <el-menu-itemindex="MisCustomerIm"            v-if="proxy.isAuth(['ROOT','CUSTOMER_IM:SELECT'])"            @click="$router.push({name:'MisCustomerIm'})">            <el-icon>              <SvgIconname="im_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">客服IM</span>          </el-menu-item>        </el-sub-menu>        <el-sub-menuindex="体检管理"          :popper-class="'site-sidebar--'+sidebar.sidebarLayoutSkin+'-popper'">          <template#title>            <el-icon>              <SvgIconname="night_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">体检管理</span>          </template>          <el-menu-itemindex="MisAppointment"            v-if="proxy.isAuth(['ROOT','APPOINTMENT:SELECT'])"            @click="$router.push({name:'MisAppointment'})">            <el-icon>              <SvgIconname="appointment_fill"                class="icon-svg"/>            </el-icon>            <spanslot="title">体检预约</span>          </el-menu-item>          <el-menu-itemindex="MisCustomerCheckin"            v-if="proxy.isAuth(['ROOT','CUSTOMER_CHICKIN:SELECT'])"            @click="$router.push({name:'MisCustomerCheckin'})">            <el-icon>              <SvgIconname="checkin_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">体检签到</span>          </el-menu-item>          <el-menu-itemindex="MisAppointmentRestriction"            v-if="proxy.isAuth(['ROOT','APPOINTMENT_RESTRICTION:SELECT'])"            @click="$router.push({name:'MisAppointmentRestriction'})">            <el-icon>              <SvgIconname="setting_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">预约设置</span>          </el-menu-item>          <el-menu-itemindex="MisCheckup"            v-if="proxy.isAuth(['ROOT','CHECKUP:SELECT'])"            @click="$router.push({name:'MisCheckup'})">            <el-icon>              <SvgIconname="doctor_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">医生检查</span>          </el-menu-item>          <el-menu-itemindex="MisCheckupReport"            v-if="proxy.isAuth(['ROOT','CHECKUP_REPORT:SELECT'])"            @click="$router.push({name:'MisCheckupReport'})">            <el-icon>              <SvgIconname="file_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">体检报告</span>          </el-menu-item>        </el-sub-menu>        <el-sub-menuindex="系统设置"          :popper-class="'site-sidebar--'+sidebar.sidebarLayoutSkin+'-popper'"          v-if="proxy.isAuth(['ROOT','SYSTEM:SELECT'])">          <template#title>            <el-icon>              <SvgIconname="system_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">系统设置</span>          </template>          <el-menu-itemindex="MisFlowRegulation"            v-if="proxy.isAuth(['ROOT','FLOW_REGULATION:SELECT'])"            @click="$router.push({name:'MisFlowRegulation'})">            <el-icon>              <SvgIconname="people_fill"class="icon-svg"/>            </el-icon>            <spanslot="title">人员限流</span>          </el-menu-item>        </el-sub-menu>      </el-menu>    </div>  </aside>  <!--避免路由引用页面的时候浏览器不刷新内容,所以给URL添加随机数参数-->  <router-view:key="router.currentRoute.value.query.random"/></div>在application.yml文件中,配置MongoDB连接。因为MongoDB自带数据库连接池,所以我们不需要在Java项目中重复配置连接池。spring: …… redis:  database:0  host:localhost  port:6379  password:abc123456  jedis:   pool:    #连接超时的最大时间    max-active:1000    #等待空闲连接的最大等待时间(负数代表一直等待)    max-wait:-1ms    max-idle:16    min-idle:8因为SpringBootData中默认的RedisTemplate存在序列化机制的问题,向Redis里面保存Hash类型数据通常是乱码的,为了解决这个问题,我们需要自己定义配置类,修改RedisTemplate使用的序列化机制。在com.example.his.api.config包中,创建RedisTemplateConfig类。packagecom.example.his.api.config.sa_token;importjava.util.List;importorg.springframework.stereotype.Component;importcn.dev33.satoken.SaManager;importcn.dev33.satoken.fun.SaFunction;importcn.dev33.satoken.listener.SaTokenEventCenter;importcn.dev33.satoken.session.SaSession;importcn.dev33.satoken.stp.SaLoginModel;importcn.dev33.satoken.stp.SaTokenInfo;importcn.dev33.satoken.stp.StpLogic;/** *Sa-Token权限认证工具类(业务端使用) */@ComponentpublicclassStpCustomerUtil{  privateStpCustomerUtil(){  }  /**   *账号类型标识   */  publicstaticfinalStringTYPE="customer";  /**   *底层的StpLogic对象   */  publicstaticStpLogicstpLogic=newStpLogic(TYPE);  /**   *获取当前StpLogic的账号类型   *   *@returnSeeNote   */  publicstaticStringgetLoginType(){    returnstpLogic.getLoginType();  }  /**   *重置StpLogic对象   *<br>1、更改此账户的StpLogic对象   *<br>2、put到全局StpLogic集合中   *<br>3、发送日志   *   *@paramnewStpLogic/   */  publicstaticvoidsetStpLogic(StpLogicnewStpLogic){    //重置此账户的StpLogic对象    stpLogic=newStpLogic;    //添加到全局StpLogic集合中    //以便可以通过SaManager.getStpLogic(type)的方式来全局获取到这个StpLogic    SaManager.putStpLogic(newStpLogic);    //$$全局事件    SaTokenEventCenter.doSetStpLogic(stpLogic);  }  /**   *获取StpLogic对象   *   *@return/   */  publicstaticStpLogicgetStpLogic(){    returnstpLogic;  }关于这个项目我就讲到这里,感谢大家!
  • 所需E币: 0
    时间: 2023-12-20 15:06
    大小: 4.4KB
    上传者: 开心就很好了
    大家都知道医疗行业是互联网发展前景极好的领域之一,对于初入职者、转行者来说都是很好的选择,今天我将给大家讲解一个关于健康+体检双系统的项目,项目以业务驱动技术栈,打造完整、全面的双系统项目,并采用前后端分离架构,业务功能完善,界面美观,可以高效积累大型医疗项目经验,快速提升医疗行业就业竞争力。项目开始前,我们先来安装JDK如果你本地有其他版本的JDK,一定要先卸载所有JDK,然后再安装JDK15.0.2,并且配置`PATH`和`JAVA_HOME`环境变量,否则JDK版本会出现错乱。第二步就是部署Maven工具配置的repository目录地址,你根据Maven解压缩的位置,修改这个文件夹地址即可。<localRepository>Maven解压缩路径\repository</localRepository>有时候可能由于Maven下载的依赖库丢包了,导致Java项目中没能识别某些Java类的时候。你可以把Maven的repository文件夹清空,然后重新启动IDEA工具,让Maven重新下载依赖库。第三步配置MySQL_1节点在Navicat上面,到MySQL_1节点上执行4条SQL语句。以MySQL_4为主节点,订阅日志同步数据。我们先在MyCat上面执行一个SQL语句,看看INSERT语句是否能转发给主节点,然后数据同步到其他5个节点。dockerrun-it-d--nameminio\-p9000:9000-p9001:9001\--netmynet--ip172.18.0.12-m400m\-v/root/minio/data:/data\-eTZ=Asia/Shanghai--privileged=true\--envMINIO_ROOT_USER="root"\--envMINIO_ROOT_PASSWORD="abc123456"\--envMINIO_SKIP_CLIENT="yes"\bitnami/minio:latest每次发出Ajax请求的时候,我们要写很多JQuery语句。特别是处理后端返回的状态码,我们要做不同的处理。如果每次发送Ajax请求都要写一大堆代码,是不是太繁琐了。不如我们把发送Ajax请求给封装起来,以后调用这个封装函数就可以了,那该多好啊。在main.ts文件中,创建全局函数封装Ajax代码。//导入JQuery库,因为Ajax用起来非常方便,支持同步和异步的Ajax请求import$from'jquery';//导入ElementUI的消息通知组件,下面封装全局Ajax的时候处理异常的时候需要弹出通知import{ElMessage}from'element-plus';//后端项目的URL根路径letbaseUrl='http://localhost:7700/his-api';app.config.globalProperties.$baseUrl=baseUrl;//设置全局变量$baseUrl//Minio服务器地址letminioUrl='http://localhost:9000/his';app.config.globalProperties.$minioUrl=minioUrl;//封装全局Ajax公共函数app.config.globalProperties.$http=function(url:string,method:string,data:JSON,async:boolean,fun:Function){  $.ajax({    url:baseUrl+url,    type:method,    dataType:'json',    contentType:'application/json',    //上传的数据被序列化(允许Ajax上传数组)    traditional:true,    xhrFields:{      //允许Ajax请求跨域      withCredentials:true    },    headers:{      token:localStorage.getItem('token')    },    async:async,    data:JSON.stringify(data),    success:function(resp:any){      if(resp.code==200){        fun(resp);      }else{        ElMessage.error({          message:resp.msg,          duration:1200        });      }    },    error:function(e:any){      //ajax有语法错误的时候      if(e.status==undefined){        ElMessage.error({          message:'前端页面错误',          duration:1200        });      }       else{        letstatus=e.status;        //没有登陆体检系统        if(status==401){          if(url.startsWith('/front/')){            router.push({              name:'FrontIndex'            });          }else{            router.push({              name:'MisLogin'            });          }        }         else{          //后端没有运行,提交的数据有误,或者没有连接上后端项目          if(!e.hasOwnProperty('responseText')){            ElMessage.error({              message:'后端项目没有启动,或者HTTP请求类型以及参数错误',              duration:1200            });          }           else{            ElMessage.error({              message:e.responseText,              duration:1200            });          }        }      }    }  });};我们先从前端验证函数开始做起。因为发送Ajax请求的时候,前端项目先做数据验证,这就离不开验证函数。在/src/utils目录中创建validate.ts文件,然后定义若干验证函数。/** *验证是否为空或者空字符串 */exportfunctionisBlank(s:string){returns==null||s.length==0;}/** *验证邮箱 */exportfunctionisEmail(s:string){return/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s);}/** *验证手机号码 */exportfunctionisMobile(s:string){return/^1[1-9]\d{9}$/.test(s);}/** *验证URL地址 */exportfunctionisURL(s:string){return/^http[s]?:\/\/.*/.test(s);}/** *验证用户名 */exportfunctionisUsername(s:string){return/^[a-zA-Z0-9]{5,50}$/.test(s);}/** *验证密码 */exportfunctionisPassword(s:string){return/^[a-zA-Z0-9]{6,20}$/.test(s);}/** *验证手机短信验证码 */exportfunctionisSmsCode(s:string){return/^\d{6}$/.test(s);}MIS端框架页面的视图层代码我们要加以修改,比如说<main>标签的:class属性要根据isTab切换不同的样式。还有就是给<el-tabs>设置上v-if判断,如果isTab为true就用Tab控件引用Vue压面;反之就用<el-card>控件引用Vue页面。<divclass="site-content__wrapper">  <mainclass="site-content"    :class="{'site-content--tabs':$route.meta.isTab}">    <el-tabsv-if="$route.meta.isTab"      v-model="siteContent.mainTabsActiveName":closable="true">      <el-tab-panev-for="iteminsiteContent.mainTabs"        :label="item.title":name="item.name">        <el-card>          <router-view:key="router.currentRoute.value.query.random"/>        </el-card>      </el-tab-pane>    </el-tabs>    <el-cardv-else>      <router-view:key="router.currentRoute.value.query.random"/>    </el-card>  </main></div>如果Home页面显示的时候,应该销毁所有的Tab控件。为了实现这个效果,我们可以清空mainTabs数组的元素,并且清理mainTabsActiveName属性值。functionrouteHandle(route){  //判断是否要创建Tab控件  if(route.meta.isTab){    /*创建Tab控件之前,先判断mainTabs[]数组中是否存在该Vue页面的Tab控件。     *比如我们要访问角色管理页面,程序先要判断是否存在角色管理页面的Tab控件。     *如果不存在就创建Tab控件;如果存在就不创建新的Tab控件,直接切换到现有的Tab控件     */    lettab=siteContent.mainTabs.filter(item=>item.name===route.name)[0];    if(tab==null){      tab={        title:route.meta.title,        name:route.name      };      siteContent.mainTabs.push(tab);    }    //选中某个Tab控件    siteContent.mainTabsActiveName=tab.name;    //选中某个菜单项    siteContent.menuActiveName=tab.name;  }  else{    siteContent.mainTabs=[]    //取消选中某个Tab控件    siteContent.mainTabsActiveName="";    //选中某个菜单项    siteContent.menuActiveName="Home";  }}编写src/views/mis/home.vue页面的视图层标签,并且创建home.less文件,让Home页面引用。<template>  <divclass="home">    <divclass="left">      <h2>神州大健康体检系统</h2>      <divclass="desc">        <p>医疗健康&nbsp;&nbsp;模式创新</p>        <p>汇集名医&nbsp;&nbsp;让诊疗更简单</p>      </div>      <divclass="bottom">        <divclass="remark-container">          <divclass="ballblue">1</div>          <divclass="remark">先进的技术</div>        </div>        <divclass="remark-container">          <divclass="ballred">2</div>          <divclass="remark">强大的团队</div>        </div>        <divclass="remark-container">          <divclass="ballgreen">3</div>          <divclass="remark">丰富的经验</div>        </div>      </div>    </div>    <divclass="right">      <imgsrc="../../assets/home/banner.png"class="banner"/>    </div>  </div></template><script></script><stylelang="less"scoped="scoped">  @importurl('home.less');</style>以下就是本项目的开发流程,希望我的文章对大家的学习有所帮助!感谢大家的阅读
  • 所需E币: 0
    时间: 2023-11-10 16:17
    大小: 3.83KB
    SpringBoot+Vue3+MySQL集群开发健康体检双系统课程2023,视频+源码+电子书下载!14大业务模块设计,全流程双系统联动开发,全面掌握业务设计与核心技术。双系统联动+复杂功能设计+缜密业务开发,让你获得一个极具竞争力的面试作品医疗行业是互联网发展前景极好的领域之一,对于初入职者、转行者来说都是很好的选择。课程以业务驱动技术栈,打造完整、全面的双系统项目,并采用前后端分离架构,业务功能完善(健康体检与健康管理两大业务),界面美观,可以高效积累大型医疗项目经验,快速提升医疗行业就业竞争力。一、安装JDK本课程云盘上面附带了JDK15.0.2的安装包,大家下载安装即可。因为从JDK16开始,Oracle移除了JDK中JavaSE的很多类。导致我们用JDK15以后的版本做项目,Maven导入的一些第三方依赖会出现找不到Java工具类的情况,而且更有甚者异常信息也没说找不到哪些类,直接就报运行错误。这就让我们调试程序无从下手,JDK几十万个工具类,我们不可能逐一排查,所以为了保证我们的项目能最大化的兼容Maven下载的依赖库,我们应该安装使用不高于JDK16的版本。相信很多人依然坚持使用JDK1.8,其实1.8这个版本的JDK真的太老了,比方说Activiti7.0工作流框架就不支持这么老的JDK,很多其他框架也都不支持1.8了。所以挑来挑去,只有JDK15.0.2这个版本最合适了。二、为什么选用VirtualBox虚拟机?VirtualBox虚拟机是Oracle提供的免费虚拟机软件,虽然知名度赶不上VMware虚拟机,但是凭借出色的稳定性还是得到了很多程序员的肯定,包括我自己在内。这两年VMware虚拟机版本更新很快,但是BUG越来越多,数不胜数。比方说SSH连接上传文件的时候,会突然掉速到10KB以下。像这样的BUG太多太多了,所以我建议大家还是用VirtualBox虚拟机吧,BUG少,还稳定。三、关于数据库集群读写一致性的思考我们使用主从同步机制搭建出来的MySQL集群,属于弱一致性的集群。也就是说在非常特殊的场景下,我们写入的数据和读取出来的数据可能不一致。我把会出现读写不一致的场景归纳出来了,我们一起看一下。1.写入和查询间隔时间太短假设我们要执行的INSERT语句发送给了MySQL_1节点执行,但是紧接着马上执行了SELECT语句,这个查询语句被MyCat转发给MySQL_2执行。假设INSERT和SELECT语句之间的时间间隔短到1毫秒,导致MySQL_2还没有同步写入的数据,查询语句就来了,自然是查询不到刚刚插入的数据。2.主从同步失效当MySQL_1和MySQL_2的主从同步失效,MySQL_2节点依然能应答MyCat心跳检测,所以MyCat依然认为MySQL_2节点是正常的节点。还是刚才的例子,MySQL_1写入数据后,因为主从同步失效,导致MySQL_2节点上没有新写入的数据,我们也就查询不到刚写入的数据了。那么有没有解决办法呢?我们只能写监控程序,每隔1秒钟执行一次showslavestatus语句,查看结果是不是包含两个YES字样。如果数据同步失效,就立即发送告警邮件,由运维人员及时处理。也许有人好奇什么情况会导致主从同步失效?软硬件都有可能,比如说MyCat、MySQL_1和MySQL_2各自处在不同的机房中。MyCat与MySQL_1和MySQL_2的网络是通畅的,但是MySQL_1和MySQL_2机房之间网络却是不通的,可能是网线断了,也可能是交换机软件的故障。反正网络不通,主从同步自然也就失效了。安装ElementPlus库把EP组件库整合到前端项目的第一个步骤是安装依赖库。执行下面的命令,安装三个依赖库。npminstallelement-plus#安装图标库npminstall@element-plus/icons-vue#安装sass,可以自定义样式覆盖ElementPlus自带样式npminstallsassEP组件库的UI控件特别多,我们最好用哪个组件,就在页面里面引入该组件,而不是一次性把所有UI组件都引入到Vue页面中。一次性引入大量的UI组件会影响浏览器渲染页面的速度,所以我们一定要按需引入UI组件。为了能按需引入UI组件,我们需要安装两个依赖库。npminstallunplugin-vue-components-Dnpminstallunplugin-auto-import -D四、定义前端验证函数这节课我们先从前端验证函数开始做起。因为发送Ajax请求的时候,前端项目先做数据验证,这就离不开验证函数。在/src/utils目录中创建validate.ts文件,然后定义若干验证函数。/** *验证是否为空或者空字符串 */exportfunctionisBlank(s:string){returns==null||s.length==0;}/** *验证邮箱 */exportfunctionisEmail(s:string){return/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s);}/** *验证手机号码 */exportfunctionisMobile(s:string){return/^1[1-9]\d{9}$/.test(s);}/** *验证URL地址 */exportfunctionisURL(s:string){return/^http[s]?:\/\/.*/.test(s);}/** *验证用户名 */exportfunctionisUsername(s:string){return/^[a-zA-Z0-9]{5,50}$/.test(s);}/** *验证密码 */exportfunctionisPassword(s:string){return/^[a-zA-Z0-9]{6,20}$/.test(s);}/** *验证手机短信验证码 */exportfunctionisSmsCode(s:string){return/^\d{6}$/.test(s);}五、设计“关于我们”的样式编写main.less文件的内容,添加上“关于我们”区域的样式。有处细节大家必须注意,页脚的宽度是100%,但是其中主体信息的宽度是1200px,而且要居中显示,所以页脚区域里面两个DIV容器宽度是100%,而其中的列表宽度必须是1200px,还要水平居中显示。footer{  margin-top:50px;  .aboutus-container{    background-color:@bgc-1;    user-select:none;    .list{      width:1200px;      margin-left:auto;      margin-right:auto;      margin-top:0;      margin-bottom:0;      list-style:none;      padding:0;      display:flex;      justify-content:space-between;      .item{        display:flex;        padding:20px10px;        width:285px;        box-sizing:border-box;        img{          width:58px;          height:58px;          margin:10px;          display:block;        }        div{          h3{            font-size:20px;            color:@fc-1;            margin:10px05px0;          }          p{            font-size:12px;            color:@fc-3;            margin:0000;          }        }      }    }  }}
  • 所需E币: 0
    时间: 2023-6-13 15:33
    大小: 2.51KB
    分享课程——Kubernetes系统精讲Go语言实战K8S集群可视化,视频+源码+word文档(也就是电子教程,独家提供)下载!!课程持续更新,请关注本学习地址!《Kubernetes系统精讲Go语言实战K8S集群可视化》保姆式实践指导+配套实用电子教程(也就是word文档,独家提供),助力Kubernetes(K8S)从入门到进阶,让你听得懂,更学得会,全方位提升满足企业多维需求的K8S实战技能。课程中将带领大家,系统学习新版K8S的核心知识、深度理解设计思想及底层架构原理,体系化平滑进阶的同时,基于GO从0到1打造专属K8S集群管理平台,真正落地K8S生产实践及二次开发能力。第1章【基础理论】Docker基础入门第2章【基础理论】Kubernetes集群初始化第3章【项目实战】KubeImooc项目开发环境搭建第4章【核心知识+原理分析】Pod参数详解第5章【项目实战】KubeImooc项目Pod管理模块开发第6章【核心知识+原理分析】K8S调度管理第7章【项目实战】KubeImooc项目调度管理模块开发第8章【核心知识+原理分析】将应用和配置分离第9章【项目实战】KubeImooc项目应用与配置分离模块开发第10章【核心知识+原理分析】存储卷管理第11章【项目实战】KubeImooc项目存储卷管理第12章【核心知识+原理分析】服务发现第13章【项目实战】KubeImooc项目服务发现模块开发第14章【核心知识+原理分析】工作负载管理第15章【项目实战】KubeImooc工作负载管理模块开发第16章【核心知识+原理分析】K8S认证与授权第17章【项目实战】KubeImooc认证与授权模块开发第18章【项目实战】K8S二次开发CRD项目实战第19章【项目实战】整合Harbor镜像中心第20章【项目实战】集群监控,整合Prometheus源码+word文档(电子教程)K8S架构设计首先K8S的用户,通常是运维人员。运维人员可以通过kubectl命令,对于开发者而言,Golang则对应client-go库,这个库后面我们会大量用到,当然其他的编程语言也有对应的SDK可以用。kubectl或是编程语言SDK,本质都是调用apiserver提供的接口。调用apiserver接口后,将资源定义信息存入到ETCD数据库资源定义信息就是期望状态,controller-manager会努力将期望状态变为实际状态,并且会把实际状态写入etcd到数据库如果没有通过scheduler调度模块,那么实际状态就是待调度中,因此当scheduler把pod调度到用户指定的节点时,这时实际状态则就是真实的Pod运行状态了。当scheduler把pod调度到具体某个节点信息写入到etcd数据库,这时节点上的kubelet会利用list-watch机制,这个机制课程后面会详细讲,并且大量用到。我们现在需要明白的就是,利用这种机制,kubelet能够收到运行pod的定义信息,并且把pod运行起来。每个节点上都会有kubeproxy服务,包括master节点,利用kubeproxy模块,可以作为集群的流量入口。Docker与K8S的区别和联系Docker和K8S本质上都是创建容器的工具,Docker作用与单机,K8S作用与集群。容器技术的变革Docker我相信小伙伴们都在熟悉不过了,但是小伙伴们别把容器的概念理解为只有Docker哦~,其实除了Docker之外,还有containerd、CRI-O、Kata、Virtlet等等。在单机的容器解决方案,首选Docker。随着时代的发展,对系统的性能有了更高的要求,高可用、高并发都是基本要求。随着要求变高的的同时,单机显然性能就跟不上了,服务器集群管理就是发展趋势,所以Kubernetes为代表的云原生技术强势发展。我们可以看到包括了Docker和K8S两条主线,其中Docker主要是在单机上使用,K8S是用于集群。Docker可以直接调用containerd,但是K8S与contained配合使用的话,需要实现其CRI才能和其配合使用。那什么是CRI呢?CRI全称是ContainerRuntimeInterface即容器运行时接口,只要是实现了CRI的容器运行时就能够和K8S一起愉快的玩耍了。如图我们看到的,containerd是通过criplugin来适配CRI的,而CRI-O则是为CRI量声打造。调用了容器应用时之后,下一步就是通过runc来创建容器化的进程。那什么是runc呢?runc是OCI的一种实现方式,OCI全称是OpenContainerInitiative,OCI定义了镜像和容器的运行规范和接口。通过runc就能创建资源隔离的容器化进程啦。这些容器化进程隔离的资源就包括:内存、网络、CPU等。
  • 所需E币: 0
    时间: 2023-6-8 10:41
    大小: 1.51KB
    上传者: 开心就很好了
    Linux云计算运维工程师路线图(集群、虚拟化、K8S、Docker、智能化、Python大数据)课程分享从目前市场发展情况以及应用率来说,Linux云计算的就业前景是非常不错的,至少在未来十年都是非常不错的职业,市场上对于Linux人才需求量很大,就业薪资待遇也是非常不错,有百分之八十的公司都在使用Linux;学习Linux之后可以从业的岗位也是非常多的,比如说:Linux运维工程师Linux运维平台研究工程师运维开发工程师运维总监大数据运维工程师系统运维架构师随着互联网的高速发展、网站规模越来越大、架构越来越复杂,对网络运维工程师的需求也会越来越急迫,特别是对有经验的人才需求量大,而且职业发展前景非常好。Linux云计算运维工程师路线图(集群、虚拟化、K8S、Docker、智能化、Python大数据)持续更新第一阶段Linux基础环境搭建篇第二阶段Linux磁盘管理第三阶段Linux网络篇第四阶段Docker篇  第五阶段Kubernetes(K8S)篇 第六阶段Shell基础+实战 地七阶段搜索引擎运维篇+logstash日志收集第八阶段自动化运维第九阶日志监控系统Promethus第十阶段K8S监控方案第十一阶段大型在线教育运维项目
  • 所需E币: 0
    时间: 2023-5-19 17:01
    大小: 540B
    上传者: 蝴蝶结欧恩
    分享课程——Kubernetes系统精讲Go语言实战K8S集群可视化,附代码+电子手册。课程中将带领大家,系统学习新版K8S的核心知识、深度理解设计思想及底层架构原理,体系化平滑进阶的同时,基于GO从0到1打造专属K8S集群管理平台,真正落地K8S生产实践及二次开发能力。
  • 所需E币: 5
    时间: 2023-2-14 12:37
    大小: 1.62MB
    上传者: czd886
    基于惯性传感器的集群移动机器人定位系统设计
  • 所需E币: 0
    时间: 2023-2-9 22:04
    大小: 1.34MB
    上传者: ZHUANG
    无人机集群网络分簇优化算法.
  • 所需E币: 5
    时间: 2023-2-13 10:30
    大小: 742.82KB
    上传者: czd886
    基于openTCS的移动机器人集群调度系统
  • 所需E币: 5
    时间: 2022-7-30 10:01
    大小: 294.96KB
    上传者: ZHUANG
    基于Matlab多核集群的人脸识别算法的并行化设计
  • 所需E币: 0
    时间: 2022-7-19 11:38
    大小: 280.07KB
    上传者: czd886
    城市共用调度集群移动通信网的应用与发展策略
  • 所需E币: 0
    时间: 2022-7-14 15:39
    大小: 4.86MB
    上传者: czd886
    基于演化博弈的无人机集群协同应用
  • 所需E币: 4
    时间: 2022-7-14 13:58
    大小: 1.87MB
    上传者: czd886
    基于区块链的无人机集群安全协作
  • 所需E币: 0
    时间: 2022-7-14 13:53
    大小: 1.38MB
    上传者: czd886
    基于改进一致性算法的无人机集群饱和攻击
  • 所需E币: 0
    时间: 2022-7-13 23:20
    大小: 6.48MB
    上传者: czd886
    面向体系仿真的智能无人机集群作战建模总体框架研究
  • 所需E币: 0
    时间: 2022-7-13 23:14
    大小: 1.13MB
    上传者: czd886
    基于嵌套PSO算法的反无人机集群防空部署模型
  • 所需E币: 0
    时间: 2022-7-13 23:14
    大小: 1.89MB
    上传者: czd886
    基于改进帧结构设计的无人机集群信道均衡
  • 所需E币: 1
    时间: 2022-7-13 22:00
    大小: 3.86MB
    上传者: czd886
    一种无人机集群对抗多耦合任务智能决策方法.
  • 所需E币: 0
    时间: 2022-7-13 21:56
    大小: 3.59MB
    上传者: czd886
    一种适用无人机集群的多段补偿时间同步算法
  • 所需E币: 0
    时间: 2022-7-13 11:33
    大小: 717.29KB
    上传者: czd886
    基于深度强化学习的无人机集群协同信息筛选方法研究