如何有效防止数据中心系统宕机 数据中心宕机,应对的主要措施与方法有哪些

\u5982\u4f55\u89e3\u51b3\u548c\u907f\u514d\u670d\u52a1\u5668\u5b95\u673a

\u4e00\u822c\u7684\u8bdd\uff0c\u9884\u6d4b\u4e0b\u81ea\u5df1\u7f51\u7ad9\u5e76\u53d1\u8bbf\u95ee\u6570\uff0c\u7136\u540eIIS\u9650\u5236\u8fde\u63a5\u6570\u4e0d\u8981\u8d85\u8fc7\u4f60\u7684\u627f\u53d7\u80fd\u529b\u3002\u7136\u540e\u6709\u653b\u51fb\u7684\u8bdd\uff0c\u6700\u597d\u662f\u9009\u62e9\u5177\u6709\u9632\u5fa1\u7684\u670d\u52a1\u5668\u3002

1. \u6570\u636e\u5206\u6563\u51cf\u5c11\u98ce\u9669\uff1a\u5728\u5b9a\u5236\u6570\u636e\u4e2d\u5fc3\u6218\u7565\u65f6\uff0c\u5e94\u8be5\u6e05\u695a\u7684\u77e5\u9053\uff0c\u6240\u6709\u6570\u636e\u653e\u5728\u4e00\u8d77\uff0c\u4f1a\u5b58\u5728\u975e\u5e38\u5927\u7684\u98ce\u9669\u3002\u53ef\u4ee5\u628a\u4e3b\u8981\u6570\u636e\u653e\u5728\u4e00\u4e2a\u4f4d\u7f6e\uff0c\u5e76\u5c06\u5907\u4efd\u7684\u6570\u636e\u653e\u5728\u91cf\u4e00\u4e2a\u4f4d\u7f6e\u3002\u8fd9\u6837\u6bcf\u5e74\u5907\u4efd\u4e00\u6b21\uff0c\u53ef\u4ee5\u51cf\u5c11\u5b95\u673a\u5bf9\u4f01\u4e1a\u9020\u6210\u7684\u635f\u5931\u30022.\u4e86\u89e3\u5931\u8d25\u7684\u6848\u4f8b\uff1a\u4e86\u89e3\u6570\u636e\u4e2d\u5fc3\u7684\u5b95\u673a\u6848\u4f8b\u3001\u5904\u7406\u5931\u8d25\u6848\u4f8b\u7684\u65b9\u6cd5\u548c\u91c7\u53d6\u7684\u9632\u8303\u63aa\u65bd\u30023.\u5b66\u4e60\u6570\u636e\u4e2d\u5fc3\u76f8\u5173\u77e5\u8bc6\uff1a\u5b66\u4e60\u6570\u636e\u4e2d\u5fc3\u65b9\u9762\u7684\u77e5\u8bc6\uff0c\u6765\u66f4\u597d\u7684\u9884\u9632\u6570\u636e\u4e2d\u5fc3\u5b95\u673a\u30024.\u8bb0\u5f55\u65e5\u5e38\u8fd0\u8425\u5de5\u4f5c\uff1a\u8bb0\u5f55\u65e5\u5e38\u8fd0\u8425\u6d41\u7a0b\u4ee5\u53ca\u64cd\u4f5c\u6d41\u7a0b\u7684\u4e60\u60ef\uff0c\u6587\u6863\u5bf9\u4e8e\u5728\u53d1\u751f\u707e\u96be\u65f6\u505a\u597d\u51c6\u5907\u81f3\u5173\u91cd\u8981\uff0c\u8fd9\u5176\u4e2d\u5305\u62ec\uff1a\u4e86\u89e3\u5e94\u7528\u7a0b\u5e8f\u8fd0\u884c\u7684\u4f4d\u7f6e\uff0c\u77e5\u9053\u4e2d\u65ad\u54ea\u4e9b\u53d7\u5230\u5f71\u54cd\u6700\u5927\u7b49\u7b49\u3002\u66f4\u591a\u6570\u636e\u4e2d\u5fc3\u4fe1\u606f\uff0c\u70b9\u51fbwww.xdcplus.com

  这篇文章主要介绍了防止服务器宕机时MySQL数据丢失的几种方案,结合实践介绍了Replication和Monitor以及Failover这三个项目的应用,需要的朋友可以参考下   对于多数应用来说,MySQL都是作为最关键的数据存储中心的,所以,如何让MySQL提供HA服务,是我们不得不面对的一个问题。当master当机的时候,我们如何保证数据尽可能的不丢失,如何保证快速的获知master当机并进行相应的故障转移处理,都是需要我们好好思考的。这里,笔者将结合这段时间做的MySQL proxy以及toolsets相关工作,说说我们现阶段以及后续会在项目中采用的MySQL HA方案。   Replication   要保证MySQL数据不丢失,replication是一个很好的解决方案,而MySQL也提供了一套强大的replication机制。只是我们需要知道,为了性能考量,replication是采用的asynchronous模式,也就是写入的数据并不会同步更新到slave上面,如果这时候master当机,我们仍然可能会面临数据丢失的风险。   为了解决这个问题,我们可以使用semi-synchronous replication,semi-synchronous replication的原理很简单,当master处理完一个事务,它会等待至少一个支持semi-synchronous的slave确认收到了该事件并将其写入relay-log之后,才会返回。这样即使master当机,最少也有一个slave获取到了完整的数据。   但是,semi-synchronous并不是100%的保证数据不会丢失,如果master在完成事务并将其发送给slave的时候崩溃,仍然可能造成数据丢失。只是相比于传统的异步复制,semi-synchronous replication能极大地提升数据安全。更为重要的是,它并不慢,MHA的作者都说他们在facebook的生产环境中使用了semi-synchronous(这里),所以我觉得真心没必要担心它的性能问题,除非你的业务量级已经完全超越了facebook或者google。在这篇文章里面已经提到,MySQL 5.7之后已经使用了Loss-Less Semi-Synchronous replication,所以丢数据的概率已经很小了。   如果真的想完全保证数据不会丢失,现阶段一个比较好的办法就是使用gelera,一个MySQL集群解决方案,它通过同时写三份的策略来保证数据不会丢失。笔者没有任何使用gelera的经验,只是知道业界已经有公司将其用于生产环境中,性能应该也不是问题。但gelera对MySQL代码侵入性较强,可能对某些有代码洁癖的同学来说不合适了:-)   我们还可以使用drbd来实现MySQL数据复制,MySQL官方文档有一篇文档有详细介绍,但笔者并未采用这套方案,MHA的作者写了一些采用drdb的问题,在这里,仅供参考。   在后续的项目中,笔者会优先使用semi-synchronous replication的解决方案,如果数据真的非常重要,则会考虑使用gelera。   Monitor   前面我们说了使用replication机制来保证master当机之后尽可能的数据不丢失,但是我们不能等到master当了几分钟才知道出现问题了。所以一套好的监控工具是必不可少的。   当master当掉之后,monitor能快速的检测到并做后续处理,譬如邮件通知管理员,或者通知守护程序快速进行failover。   通常,对于一个服务的监控,我们采用keepalived或者heartbeat的方式,这样当master当机之后,我们能很方便的切换到备机上面。但他们仍然不能很即时的检测到服务不可用。笔者的公司现阶段使用的是keepalived的方式,但后续笔者更倾向于使用zookeeper来解决整个MySQL集群的monitor以及failover。   对于任何一个MySQL实例,我们都有一个对应的agent程序,agent跟该MySQL实例放到同一台机器上面,并且定时的对MySQL实例发送ping命令检测其可用性,同时该agent通过ephemeral的方式挂载到zookeeper上面。这样,我们可以就能知道MySQL是否当机,主要有以下几种情况:   机器当机,这样MySQL以及agent都会当掉,agent与zookeeper连接自然断开   MySQL当掉,agent发现ping不通,主动断开与zookeeper的连接   Agent当掉,但MySQL未当   上面三种情况,我们都可以认为MySQL机器出现了问题,并且zookeeper能够立即感知。agent与zookeeper断开了连接,zookeeper触发相应的children changed事件,监控到该事件的管控服务就可以做相应的处理。譬如如果是上面前两种情况,管控服务就能自动进行failover,但如果是第三种,则可能不做处理,等待机器上面crontab或者supersivord等相关服务自动重启agent。   使用zookeeper的好处在于它能很方便的对整个集群进行监控,并能即时的获取整个集群的变化信息并触发相应的事件通知感兴趣的服务,同时协调多个服务进行相关处理。而这些是keepalived或者heartbeat做不到或者做起来太麻烦的。   使用zookeeper的问题在于部署起来较为复杂,同时如果进行了failover,如何让应用程序获取到最新的数据库地址也是一个比较麻烦的问题。   对于部署问题,我们要保证一个MySQL搭配一个agent,幸好这年头有了docker,所以真心很简单。而对于第二个数据库地址更改的问题,其实并不是使用了zookeeper才会有的,我们可以通知应用动态更新配置信息,VIP,或者使用proxy来解决。   虽然zookeeper的好处很多,但如果你的业务不复杂,譬如只有一个master,一个slave,zookeeper可能并不是最好的选择,没准keepalived就够了。   Failover   通过monitor,我们可以很方便的进行MySQL监控,同时在MySQL当机之后通知相应的服务做failover处理,假设现在有这样的一个MySQL集群,a为master,b,c为其slave,当a当掉之后,我们需要做failover,那么我们选择b,c中的哪一个作为新的master呢?   原则很简单,哪一个slave拥有最近最多的原master数据,就选哪一个作为新的master。我们可以通过show slave status这个命令来获知哪一个slave拥有最新的数据。我们只需要比较两个关键字段Master_Log_File以及Read_Master_Log_Pos,这两个值代表了slave读取到master哪一个binlog文件的哪一个位置,binlog的索引值越大,同时pos越大,则那一个slave就是能被提升为master。这里我们不讨论多个slave可能会被提升为master的情况。   在前面的例子中,假设b被提升为master了,我们需要将c重新指向新的master b来开始复制。我们通过CHANGE MASTER TO来重新设置c的master,但是我们怎么知道要从b的binlog的哪一个文件,哪一个position开始复制呢?   GTID   为了解决这一个问题,MySQL 5.6之后引入了GTID的概念,即uuid:gid,uuid为MySQL server的uuid,是全局唯一的,而gid则是一个递增的事务id,通过这两个东西,我们就能唯一标示一个记录到binlog中的事务。使用GTID,我们就能非常方便的进行failover的处理。   仍然是前面的例子,假设b此时读取到的a最后一个GTID为3E11FA47-71CA-11E1-9E33-C80AA9429562:23,而c的为3E11FA47-71CA-11E1-9E33-C80AA9429562:15,当c指向新的master b的时候,我们通过GTID就可以知道,只要在b中的binlog中找到GTID为3E11FA47-71CA-11E1-9E33-C80AA9429562:15这个event,那么c就可以从它的下一个event的位置开始复制了。虽然查找binlog的方式仍然是顺序查找,稍显低效暴力,但比起我们自己去猜测哪一个filename和position,要方便太多了。   google很早也有了一个Global Transaction ID的补丁,不过只是使用的一个递增的整形,LedisDB就借鉴了它的思路来实现failover,只不过google貌似现在也开始逐步迁移到MariaDB上面去了。   MariaDB的GTID实现跟MySQL 5.6是不一样的,这点其实比较麻烦,对于我的MySQL工具集go-mysql来说,意味着要写两套不同的代码来处理GTID的情况了。后续是否支持MariaDB再看情况吧。   Pseudo GTID   GTID虽然是一个好东西,但是仅限于MySQL 5.6+,当前仍然有大部分的业务使用的是5.6之前的版本,笔者的公司就是5.5的,而这些数据库至少长时间也不会升级到5.6的。所以我们仍然需要一套好的机制来选择master binlog的filename以及position。   最初,笔者打算研究MHA的实现,它采用的是首先复制relay log来补足缺失的event的方式,但笔者不怎么信任relay log,同时加之MHA采用的是perl,一个让我完全看不懂的语言,所以放弃了继续研究。   幸运的是,笔者遇到了orchestrator这个项目,这真的是一个非常神奇的项目,它采用了一种Pseudo GTID的方式,核心代码就是这个   复制代码 代码如下:   create database if not exists meta;   drop event if exists meta.create_pseudo_gtid_view_event;   delimiter ;;   create event if not exists   meta.create_pseudo_gtid_view_event   on schedule every 10 second starts current_timestamp   on completion preserve   enable   do   begin   set @pseudo_gtid := uuid();   set @_create_statement := concat('create or replace view meta.pseudo_gtid_view as select '', @pseudo_gtid, '' as pseudo_gtid_unique_val from dual');   PREPARE st FROM @_create_statement;   EXECUTE st;   DEALLOCATE PREPARE st;   end   ;;   delimiter ;   set global event_scheduler := 1;   它在MySQL上面创建了一个事件,每隔10s,就将一个uuid写入到一个view里面,而这个是会记录到binlog中的,虽然我们仍然不能像GTID那样直接定位到一个event,但也能定位到一个10s的区间了,这样我们就能在很小的一个区间里面对比两个MySQL的binlog了。   继续上面的例子,假设c最后一次出现uuid的位置为s1,我们在b里面找到该uuid,位置为s2,然后依次对比后续的event,如果不一致,则可能出现了问题,停止复制。当遍历到c最后一个binlog event之后,我们就能得到此时b下一个event对应的filename以及position了,然后让c指向这个位置开始复制。   使用Pseudo GTID需要slave打开log-slave-update的选项,考虑到GTID也必须打开该选项,所以个人感觉完全可以接受。   后续,笔者自己实现的failover工具,将会采用这种Pseudo GTID的方式实现。   在《MySQL High Availability》这本书中,作者使用了另一种GTID的做法,每次commit的时候,需要在一个表里面记录gtid,然后就通过这个gtid来找到对应的位置信息,只是这种方式需要业务MySQL客户端的支持,笔者不很喜欢,就不采用了。   后记   MySQL HA一直是一个水比较深的领域,笔者仅仅列出了一些最近研究的东西,有些相关工具会尽量在go-mysql中实现。   更新   经过一段时间的思考与研究,笔者又有了很多心得与收获,设计的MySQL HA跟先前有了很多不一样的地方。后来发现,自己设计的这套HA方案,跟facebook这篇文章几乎一样,加之最近跟facebook的人聊天听到他们也正在大力实施,所以感觉自己方向是对了。   新的HA,我会完全拥抱GTID,比较这玩意的出现就是为了解决原先replication那一堆问题的,所以我不会考虑非GTID的低版本MySQL了。幸运的是,我们项目已经将MySQL全部升级到5.6,完全支持GTID了。   不同于fb那篇文章将mysqlbinlog改造支持semi-sync replication协议,我是将go-mysql的replication库支持semi-sync replication协议,这样就能实时的将MySQL的binlog同步到一台机器上面。这可能就是我和fb方案的唯一区别了。   只同步binlog速度铁定比原生slave要快,毕竟少了执行binlog里面event的过程了,而另外真正的slaves,我们仍然使用最原始的同步方式,不使用semi-sync replication。然后我们通过MHA监控整个集群以及进行故障转移处理。   以前我总认为MHA不好理解,但其实这是一个非常强大的工具,而且真正看perl,发现也还是看的懂得。MHA已经被很多公司用于生产环境,经受了检验,直接使用绝对比自己写一个要划算。所以后续我也不会考虑zookeeper,考虑自己写agent了。

当启动Binlog后,事务会产生Binlog Event,这些Event被看做事务数据的一部分。因此要保证事务的Binlog Event和InnoDB引擎中的数据的一致性。所以带Binlog的CrashSafe要求MySQL宕机重启后能够保证:

- 所有已经提交的事务的数据仍然存在。

- 所有没有提交的事务的数据自动回滚。

- 所有已经提交了的事务的Binlog Event也仍然存在。

- 所有没有提交事务没有记录Binlog Event。

这些要求很好理解,如果重启后数据还在,但是Binlog Event没有了,就没办法复制到其他节点上了。如果重启后,数据没了,但是Binlog Event还在,那么不存在的数据就会被复制到其他节点上,从而导致主从的不一致。

为了保证带Binlog的CrashSafe,MySQL内部使用的两阶段提交(Two Phase Commit)。

  • 鍐风幆澧冧负浠涔堝埄浜庡ぇ鏁版嵁涓績搴撶殑寤鸿?
    绛旓細浜х敓婧愭簮涓嶆柇鐨勭儹閲忋傚鏋鏁版嵁涓績娓╁害杩囬珮锛岃姱鐗囧氨涓嶈兘绋冲畾宸ヤ綔锛孋PU绛夊櫒浠朵篃鏃犳硶姝e父杩愯銆備负浜嗙淮鎸佹暟鎹腑蹇冮傚疁鐨勬俯搴︼紝閬垮厤鏈嶅姟鍣ㄥ洜杩囩儹鑰瀹曟満锛屾暟鎹腑蹇冭繍钀ュ晢瑕佸埄鐢ㄥ埗鍐绯荤粺缁欐満鎴块檷娓╋紝鐢辨涔熶細浜х敓宸ㄩ鐨勫喎鍗磋垂鐢ㄣ備絾濡傛灉鎶婃暟鎹腑蹇冨缓鍦ㄦ皵娓╀綆鐨勫湴鏂癸紝鍐风幆澧冨彲浠ョ粰鏈烘埧闄嶆俯锛鏈夋晥鍦伴檷浣庤繍钀ユ垚鏈
  • 濡備綍璁鏁版嵁涓績鏇村ソ鏇寸畝鍗曠殑搴旂敤
    绛旓細瀵规锛岀敤鎴蜂竴鐩村湪瀵绘壘鏇鏈夋晥鐨勭鐞嗗伐鍏锋潵闄嶄綆鎴愭湰銆佹彁楂樻搷浣滄ц兘銆佽妭绾﹁兘婧愩傝繖鍏朵腑锛鏁版嵁涓績鍩虹璁炬柦鐨勭鐞嗛棶棰橀褰撳叾鍐层傜劧鑰岋紝鍦ㄥ綋鍓嶇殑鏁版嵁涓績锛屽線寰鍙兘鑾峰緱IT鍜屽熀纭璁炬柦鐨勫眬閮ㄨ鍥撅紝杩欑闈欐鍜岄殧绂荤殑鐘舵佸皢浼氬甫鏉瀹曟満鐨勫鍔犮佷綆鏁堝拰瀹归噺鐨勬氮璐广傚洜姝わ紝鍦ㄦ暟鎹腑蹇冪鐞嗕腑锛屾秷闄ゅ熀纭璁炬柦绠$悊鍜孖T绠$悊涔嬮棿鐨...
  • 鏁版嵁涓績杩愮淮绠$悊鍒跺害
    绛旓細闅忕潃瀹㈡埛瀵笽T绯荤粺渚濊禆绋嬪害鐨勫鍔狅紝鏁版嵁涓績鐨勫伐浣滆川閲忓皢鐩存帴褰卞搷鍒板鎴风殑涓氬姟銆佸競鍦虹敋鑷虫槸鍏徃褰㈣薄绛夈傜敱浜庝俊鎭绯荤粺瀹曟満瀵艰嚧浼佷笟涓澶╅伃鍙楁暟鍗冧竾鍏冪殑鎹熷け锛岀敋鑷宠鐩戠鏈烘瀯澶勭綒鐨勪緥瀛愬薄瑙佷笉椴溿傝繖涓彉鍖栦娇寰楁暟鎹腑蹇冪殑杩愮淮绠$悊閫愭笎娴嚭姘撮潰锛屾暟鎹腑蹇冭繍缁寸鐞嗗洟闃熷凡浠庡師鏉ョ殑鏈烘埧绠$悊鑰呮紨鍙樻垚浜咺T鏈嶅姟鐨勬彁渚涜呫傚浣...
  • 鍦ㄤ繚闅鏁版嵁鍙潬鎬т笂鐜板湪鐏儹鐨勮蒋浠跺畾涔夊瓨鍌ㄥ拰浼犵粺瀛樺偍鏈変粈涔堝尯鍒玙鐧 ...
    绛旓細鏈烘灦鎰熺煡锛氭牴鎹満鎴跨墿鐞嗘嫇鎵戠粨鏋勶紝灏嗗壇鏈垎閰嶅湪涓嶅悓鐨勬満鏋躲佹満绠便佷富鏈轰笂锛鏈夋晥鍑忓皯鐢氳嚦閬垮厤鐗╃悊纭欢锛堢數婧愩佷氦鎹㈡満绛夛級鏁呴殰瀵艰嚧鐨勬暟鎹涪澶便傜悊璁轰笂锛3 鍓湰缁撳悎鏈烘灦鎰熺煡閰嶇疆锛绯荤粺鍙渶澶氬蹇 2 涓満鏋朵笂鐨勪富鏈哄叏閮ㄥけ鏁堬紱蹇収锛氫负铏氭嫙鏈烘墦蹇収锛屽湪鍏跺彂鐢熸晠闅滄椂灏嗘暟鎹仮澶嶈嚦蹇収鐘舵侊紱鍙屾椿锛氬悓鍩庡弻鏁版嵁涓績锛...
  • 鏈嶅姟鍣瀹曟満浠涔堟剰鎬?
    绛旓細鍙互绠鍗曠殑鐞嗚В涓姝绘満.鏈嶅姟鍣ㄦ槸纭欢璁惧.鑰屼笖鏄叏骞翠簩鍗佸洓灏忔椂涓嶉棿鏂繍琛岀殑.閫氬父璐熻浇閲忎篃杈冨ぇ.鎵浠ユ椂闂翠竴闀垮氨瀹规槗鍑虹幇瀹曟満鐨勬儏鍐.鍙涓嶆槸澶绻.灏辨槸瀹屽叏姝e父鐨.涓鑸父鐢ㄦ湇鍔″櫒鐨勪汉閮界煡閬.姣忛殧涓娈垫椂闂村畾鏈熸墜鍔ㄩ噸鍚笅鏈哄櫒.瀵规満鍣ㄧ殑鎬ц兘鏈夊緢澶у府鍔.鑰屼笖鍙互閬垮厤瀹曟満鐨勬儏鍐.姣曠珶鏈嶅姟鍣ㄤ篃鏄‖浠.闀挎湡杩愯涓棿...
  • 娣峰悎浜戠殑瀹夊叏闂
    绛旓細鍏湁浜戞彁渚涘晢鎻愪緵閲嶈鐨勮祫婧愶紝浠ョ‘淇濆叾鍩虹鏋舵瀯鍦ㄧ粓绔敤鎴烽渶瑕佹椂鏈夋晥涓斿彲璁块棶銆傚敖绠′簯鎻愪緵鍟嗚繘浜嗘渶澶у姫鍔涳紝闂浠嶄笉鍙閬垮厤銆傚ぇ閲忓浼犵殑瀹曟満浜嬩欢绐佸嚭浜嗗皢搴旂敤杩愯浆鍦ㄥ崟涓鏁版嵁涓績涓旀病鏈夊湪鍏朵粬鏁版嵁涓績杩涜鏁呴殰鎭㈠鐨勯闄┿備簯鏋舵瀯甯堥渶瑕佽法鏁版嵁涓績鐨勫啑浣欐潵鍑忕紦鍗曚竴鏁版嵁涓績瀹曟満鐨勫奖鍝嶃傜己灏戝啑浣欏浜庢贩鍚堜簯鏉ヨ鍙...
  • RFID璧勪骇绠$悊RFID鏁版嵁涓績璧勪骇绠$悊
    绛旓細鍦鏁版嵁涓績鐨勯珮鏁堢鐞嗕腑锛岄櫎浜嗛夋嫨楂樺彲闈犳х殑IT璁炬柦澶栵紝璧勪骇绠$悊绯荤粺璧风潃鑷冲叧閲嶈鐨勪綔鐢ㄣ傜爺绌惰〃鏄庯紝浣庢晥鐨勮祫浜х鐞嗗彲鑳藉鑷翠弗閲嶇殑鍚庢灉锛屽瀹曟満甯︽潵鐨勫法澶ф崯澶便傛嵁缁熻锛屽ぇ鍨嬫満鏋勬瘡骞村钩鍧囩粡鍘20娆′弗閲嶅畷鏈猴紝姣忚捣浜嬩欢骞冲潎鑰楁椂13灏忔椂骞惰姳璐14涓囩編鍏冦傚叾涓紝70%鐨勫仠鏈烘簮浜庣嚎璺繛鎺ラ棶棰橈紝澶ч儴鍒嗘槸浜轰负澶辫瀵艰嚧銆傝祫...
  • 寰蒋涓轰綍灏鏁版嵁涓績寤哄湪娴峰簳?
    绛旓細杩欎釜鍦ㄦ捣搴曞棥鍡′綔鍝嶇殑鏁版嵁涓績涓鍏辫杞戒簡864鍙版湇鍔″櫒锛屽彲浠ュ瓨鍌ㄧ害500涓囬儴鐢靛奖銆傚畠灏嗕负鑻忔牸鍏扮兢宀涚殑娌挎捣鍦板尯鎻愪緵楂橀熺殑浜戣绠楄兘鍔涘拰浜掕仈缃戣繛鎺ャ傚井杞〃绀猴紝灏嗘暟鎹腑蹇冩矇鍏ユ捣搴曚富瑕佹槸鍑轰簬瀵规垚鏈殑鑰冭檻銆備负浜嗙淮鎸佹満鎴块傚疁鐨勬俯搴︼紝閬垮厤涓婂崈鍙版湇鍔″櫒瀹曟満锛岀鎶鍏徃寰寰瑕佹敮浠樺法棰濈殑绌鸿皟璐圭敤銆傚洜姝わ紝瓒婃潵瓒婂鍏徃灏...
  • 瀹曟満浜嗘槸浠涔堟剰鎬?
    绛旓細瀹曟満鏄綉绔欐垨缃戠粶鏈嶅姟閬亣鏁呴殰銆佸仠姝㈣繍琛岀殑鐘舵併傚綋涓涓綉绔欐垨绯荤粺(濡鏁版嵁涓績銆佽绠楁満绛)涓嶈兘澶熸甯歌繍琛岋紝灏辫璁や负鏄畷鏈轰簡銆傚湪杩欑鎯呭喌涓嬶紝鐢ㄦ埛鎴栧鎴峰皢鏃犳硶鑾峰緱鎴栦娇鐢ㄧ綉绔欐垨鏈嶅姟鐨勭壒瀹氶儴鍒嗘垨鏁翠釜鍔熻兘銆傚畷鏈洪氬父瀵艰嚧鏃犳硶杩炴帴缃戠珯锛屾棤娉曡闂壒瀹氱綉椤碉紝寤惰繜鎴栨棤鍝嶅簲绛夐棶棰樸傛湁鏃跺欙紝瀹曟満鍙兘鍙槸鏆傛椂鐨勶紝鍙互...
  • 澶ц繛濂ヨ繙鐢靛瓙鑲′唤鏈夐檺鍏徃鐨勫疄鏂芥渚
    绛旓細绯荤粺閲囩敤鍩轰簬鎴愮啛銆佸厛杩涚殑SOA 鏋舵瀯浣撶郴杩涜鏋勫缓,浣挎斂搴滈棬鎴蜂笌涓嬪睘鏀垮簻鍙婂鍔炲眬缃戠珯缁熶竴浜掑姩銆佹暟鎹暣鍚,鎵撻犵綉涓婃斂搴,瀹炵幇鍖呮嫭鏀垮簻淇℃伅鍙戝竷,缃戜笂鍙楃悊鍔炲叕,瀹炵幇闈㈠悜鍏紬銆佷紒涓氱殑鈥滄湇鍔′竴鏉¢緳鈥濈瓑鍔熻兘鍦ㄥ唴鐨勫叏鏂版斂搴滈棬鎴峰強缃戠粶绠$悊绯荤粺骞冲彴銆傚缓璁惧師鍒欏畨鍏ㄥ彲闈犵涓鍘熷垯:鏁版嵁浜ゆ崲銆佹暟鎹祦寮曟搸鍜鏁版嵁涓績绯荤粺鎵澶勭悊銆佷紶閫佸拰绠$悊...
  • 扩展阅读:仓库常用erp系统 ... 宕机状态形容一个人 ... 进销存软件十大排名 ... 宕机是什么意思 ... 免费进销存记账软件 ... 为什么叫宕机不叫死机 ... 服务器宕机原因及解决办法 ... 宕机怎么读 ... 系统宕机 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网