UCan下午茶杭州站:大数据时代的“答疑解惑”,还需要 get 这些!

640?wx_fmt=gif

身处被广泛热议的大数据时代,人们普遍意识到,不但数据量迅速上升为“浩如烟海”,就连数据的功能,也早已突破“信息”的范畴,逐渐成为企业从中获得无限商业价值的战略资产。

如此背景下,如何更好地存储复杂海量的数据?如何从纷繁错综的数据中找到真正存在的价值?如何为企业数据架构安全的“保护网”?这些统统被称为困惑企业的数据难题!

这不,就在前不久刚刚结束的UCan下午茶杭州站活动中,多位技术大咖针对以上问题进行了深入探讨,涉及大数据技术的重点场景运用、企业级解决方案等诸多方向,干货满满。

640?wx_fmt=png

现场开发者爆满

现场超百位开发者,热情参与了交流与互动,尤其对大数据技术在具体实践场景、以及云计算中所发挥的作用等十分关注。

此外,这些探讨也将为大数据相关领域的从业者们,提供借鉴与新思路,并十分值得广大开发者们,认真学习与总结!


640?wx_fmt=png

数据库高可用容灾方案设计和实现

(UCloud存储研发工程师 丁顺)

640?wx_fmt=png

如今大数据分析挖掘,已经成为各个行业提升竞争力的全新支点,不但助力商业化进程明显加速,还就如何在各行各业场景中发挥价值产生了热议,数据使用权、数据安全、数据存储等问题亟待解决。

对此,UCloud存储研发工程师丁顺,就“高可用数据库的概念、架构解决方案以及自动化运维”等相关领域,展开了本沙龙的首个主题分享。

丁顺认为,随着技术的发展,如今的高可用数据库,其实好处很多,例如可以方便完成读写分离。

关于读写分离,通常情况下,数据库的诸多操作中,读操作请求次数远大于写操作,高可用数据库可以将写操作放到主库上,将读操作分担到多个从库上执行,通过这种读写分离的方式,提升数据库的整体运行效率。

640?wx_fmt=png

 “高可用数据库还可以带来变更不停服的优点。简单来解释,高可用架构由多个数据库节点组成,要升级整个高可用数据库架构、或者做变更的话,会将备节点升级,再做主从切换。升级后的备节点变成主节点,之前的主节点变成备节点,随后整个系统升级完毕,这样的方式对用户影响非常小。”他补充道。

此外,高可用数据库的备份,不影响服务性能

如果按照数据同步方式,将高可用数据库进行划分,可以归类为共享存储方案、操作系统实时数据块的复制、数据库级别的主从复制以及高可用数据库集群。其中“主从复制”方案,被认为是最经典的数据同步模式。

在分享过程中,丁顺还提及了容灾切换的问题。

他强调,一个比较重要的、与高可用架构方案,不太一样的地方,就是需要数据同步的过程,所以容灾切换时,一定要同步好数据之后提升为主库,把数据库请求流量导入新主库,才可以顺利提供服务。

另外,怎样准确判断是否需要容灾,也是值得探讨的事儿。

例如,经常出现的网络波动问题,可能有一段时间,被发现不能链接主库,但通常几秒钟之后,整个业务就突然恢复了,如果这个时候,着手进行数据库的容灾工作,代价相对较大。

由于容灾的实行,可能存在额外风险,所以要准确判断,是否需要容灾,要选择在最需要容灾的时候下手才好。

640?wx_fmt=png

此外,需要额外关注的一点,在容灾切换时,可能主库和备库的数据,会出现不一致。假设容灾时,主备不容易切换,最后带来的问题,很可能就是数据丢失,这一点需要格外留心。

分享结束后,与会开发者还就UDB最大的优点、主从复制过程等方面,与丁顺展开了细致探讨。

行内人都知道,公有云2.0时代,云数据库新产品不断涌现,诸如AWS Aurora、阿里云PolarDB等。这对于长期专注分布式数据库的研发和运营的刘坚君来说,一个问题始终萦绕在他的脑海中希望得到解决:在利用最新软硬件和分布式技术改造传统数据库的工作中, 除了分布式数据库所要求的更大和更快之外,是否还有其他更重要的作用与价值呢?


640?wx_fmt=png

新一代公有云分布式数据库UCloud Exodus

(UCloud资深数据库研发工程师 刘坚君)

640?wx_fmt=png

俗话说有新就有旧,关于新旧分布式数据库的区分,刘坚君表示,云数据库出现以来,比较重要的时间节点有几个,分别是2009年AWS正式发布、国内2012年阿里云推出RDS、UCloud在2013年推出UCloud UDB、2014年AWS推出AURORA以及2017年阿里云推出PolarDB。

640?wx_fmt=png

在我们看来,其实过去的1.0版本,并非毫无用处,确实可以带来几方面的价值,其中重要的一方面,就是快速部署免运维的弹性。

随着云数据库使用量的增加,问题很难避免,所以云厂商必然会组建专业的DB团队,来“攻克” 7X24处理问题的模式,随之而来的就是“无死角”故障救援的推进,包括数据恢复、慢查询、参数调优等环节。

640?wx_fmt=png

相比2.0,尽管1.0依然存在用户价值,但出现的问题,也是不容忽视的。对此刘坚君明确认为,如今通过计算和存储分离的架构,可以让这些问题迎刃而解。   

首先,在容量与性能方面,分离架构可以帮助容量,达到100个TB,针对大部分业务的数据读库多写少的特点,增加只读实现读性能大幅度提升,同时MySQL可达100%兼容,硬件成本有效降低。   

另外,针对存储容量和计算能力按需扩容的问题,相对而言按需付费是最合理的,这表示在多个业务共同开发的过程中,分离架构可以帮助企业新业务达到逐步扩容,老业务也可以同步按照使用量扩容。   

一直以来,企业最关注运营成本。“资源成本计算机型和存储机型分开选型,成本可以大幅降低;MySQL100%兼容的情况,又让分库分表的方式成为过去。”他补充道。

640?wx_fmt=png

谈到UCloud Exodus的具体实践,刘坚君强调,其技术理念则更进一步。计算和存储分离后,存储层将完全复用云平台的高性能分布式存储(如UCloud UDisk、阿里云盘古等),而会专注于构建一款数据库内核,去适配主流公有云和私有云厂商发布的高性能分布式存储产品,这种产品架构,称之为Shared-All-Disk架构。

Shared-All-Disk架构的优点明显。在提供云数据库2.0创新功能的同时,赋予了用户业务自由迁徙的能力,不被某个云平台绑架;同时能够连接上下游的软硬件厂商,共享云数据库2.0技术红利,共建生态。

更为重要的是Exodus最终开源, 会将核心系统的每一行源码开放,赋予用户深入了解和优化Exodus的能力。

当然,采用Shared-All-Disk这种开放式架构,有更多技术问题需要解决,其中的核心问题是IO路径问题。IO路径的优化,尽管有时候会押宝公有云产品的生产能力,但并不意味着在路径优化上毫无作为。

具体来说,主要是移除Binlog,主从同步后采用Redolog复制,随后下游系统数据同步,依据归档日志(由Redo log归档而来)反向生成Binlog然后同步,Binlog去除后,基于分布式存储的原子写能力有效去Double Write。需要说明的是,借鉴大部分2.0数据库,主从数据库同步采用了Redolog,主从之间同步Redolog Addr,从收到Addr之后再去底层数据中完成拉取。

分享过程中,在场开发者还提及数据的压缩性问题,指出所介绍的路径,是否考虑到数据量扩大的问题,毕竟每天产生的数据量,都要在10亿以上。

640?wx_fmt=png

现场开发者积极互动

关于这个问题,刘坚君表示,该场景应用Aurora,目前来说,也解决不了过多的问题。如今云上场景,用来适配物联网还比较少,如果可以做到多点同时写入会更好。

精彩分享仍在继续,关于数据库的探讨,暂时告一段落后,网易资深数据库内核&大数据技术专家蒋鸿翔,又为与会开发者带来了主题为“基于Impala平台打造交互查询系统”的演讲。


640?wx_fmt=png

基于Impala平台打造交互查询系统

(网易资深数据库内核&大数据技术专家 蒋鸿翔)

640?wx_fmt=png

提到“交互查询”,蒋鸿翔先从交互查询的选型入手,他表示,项目熟悉程度、大厂背书情况以及熟悉了解其性能和优缺点指标都是考察选型的重要信息。既要拼性能,又要拼优缺点,要前期测试还要后期维护,本就不容易选择。

打比方来说,如果一个平台的性能很好,但整体架构部署上,却很复杂,模块多样且需要专人维护,这样计算下来运维成本显然很高,所以从性能以及运维成本出发,成本一旦较高,对性能的追求,也就只能以“基本满足”为标准了。

640?wx_fmt=png

为了性能和成本的双举,他抛出了Impala平台,总结出该平台有几个鲜明的特点与优势,例如,元数据缓存,是其高性能表现的重要特点之一。

据悉,利用Impala平台查询之后,整个表单的数据,在哪个节点上都会一目了然,组织清晰。此外,平台还高效支持MPP并行计算,只是当集群规模变大时,就会变得相对棘手一些。

640?wx_fmt=png

如今,代码生成,是比较流行的方式之一,很多自研数据库都会做代码生成,而Impala主要是用C11写成,此外还支持HDFS本地读。

尽管Impala平台优势多多,但依旧存在服务单点、Web信息不持久化、资源隔离不精准、底层存储不能区分用户以及负载均衡需要外部支持等缺陷。

对于此类问题的解决,蒋鸿翔一般情况下选择将Impala配合大数据平台综合使用。

他补充道,大数据服务中比较重要的选型就是ZK,如果基于ZK做成一个Load Balance,客户关联的时候,就可以主动选择,而不是被动接受,如果一台服务器出现问题,ZK的节点就会自动消掉,不会对全局产生影响。

640?wx_fmt=png

“如果加入一个管理服务器的组件,就可以更好解决服务器节点出现故障所导致的历史数据丢失问题,而且还排除了后期排查的种种局限。管理服务器会将所有的状态信息搜集进来,后续做相关分析时再也不会费力不讨好。”蒋鸿翔说。

目前,分布式KV存储系统,在互联网公司中,扮演着重要的角色,各类上层业务,对于KV存储系统的高可用性, 可扩展性和数据一致性都有着近乎苛刻的要求。

支持大部分Redis主要数据结构的协议……

在实际使用中比Key-Value命令更普遍……

还可将纯内存的Redis,转变为硬盘存储,提高容量,降低成本……

最重要的一点,可以满足对多副本间的数据强一的要求,在性能优先的情况下,可以将同步方式降级成为最终一致……

一直以来,为了满足这些,UCloud存储部门,在迭代升级分布式Redis架构的同时,也一直致力于研发,基于硬盘存储的大容量分布式KV系统。

640?wx_fmt=png

“我们发现,目前在线的服务Redis是比较流行的协议,支持较多的数据结构,包括Hash等,所以希望这套KV存储,能够用协议转化的方式支持大部分Redis协议,可以做到将一个纯内存的存储变成硬盘存储,达到成本降低、容量提升的效果,最高应该可以支持到PD级别。”UCloud技术专家王仆提出。


640?wx_fmt=png

UCloud分布式KV存储系统

(UCloud技术专家 王仆)

640?wx_fmt=png 

在长期的实践探索中,王仆发现,在测试中还是会出现一些性能方面的问题。例如一些Raft协议,可以认为是单Raft,并没有实现并行Raft功能,同步并不快等。

鉴于此,他表示后期会考虑更高的通用性的尝试,例如适配多种的存储引擎,另外一点,就是希望做成一个支持各种协议的通用结构化存储协议。

640?wx_fmt=png

关于恰当利用Redis的案例分析,据了解,其实大型社交App的客户比较适用,此外一个重要的应用,就是关注以及状态消息发布的场景。

例如,几百万用户的社交群体,要求响应会比较高,用户一般会使用Redis的数据结构来缓存数据,达成较快的响应。

王仆着重强调,其实KV存储最大的应用,还是互联网广告的DSP。

640?wx_fmt=png

DSP中,一般会在缓存中,存储一些用户定向的标签,例如健身或者购物。

“之前把这些标签和要投放的广告ID联系起来,比较快的加速定向标签对应的广告投放,通过观察投放效果来修正广告投放的估算值,这些信息一般来说会用一个独立的缓存。这种情况下,一般比较大的公司都会自己做缓存服务,如果是一个相对简单的系统或者平台,多数用户还是选择使用Redis来实现。”王仆说。

作为沙龙最后一位登台分享的嘉宾,华为云技术专家时金魁表示,其实开源流计算很多,最早是STORM,还有HERON,后来还涉及到Akka等。


640?wx_fmt=png

实时流计算技术及其应用

(华为云技术专家 时金魁)

640?wx_fmt=png

在“实时流计算技术及其应用”的分享中,时金魁表示,流计算不能避免Dataflow模型。

原因在于,首先流数据没有便捷结束的说法,数据作业开始之后就永远都不会停止;此外,很多操作都是基于一个数据集,数据集是有限的,例如查SQL语句,有开始和结束,但是流式结束查询的时候,数据结构是持续增加的,流量并没有结束。

640?wx_fmt=png

实时云计算适用场景比较多,例如广告、监控大盘、打车软件、金融风控、异常检测、交通、物流、外卖等,而且金融风控,交通、物流、外卖等很多场景都可以看到实时大数据。

谈及流计算的技术层面,时金魁认为,Flink做计算还是比较合适的。除了有一个TABLE,还能做一些SQL以及时空数据,主要用在物联网方向,例如电子围栏、车辆超速、地理位置,以及智能学习的模型、实时推理等。

“Flink用的最多的就是SQL。现在云上很多用户,一般直接写SQL,还有就是API。 Flink的特性,最基本的就是,具备消息事件,有Event Tine、ingest Time和Process Time等。”他补充道。

640?wx_fmt=png

Flink虽然看似“超能”,但也会有一些潜在的问题存在。例如,Flink数据倾斜有一个问题。因为实时数据,每一个时间点的数据量不一样,随着时间点突然增加,这个数据量变大后,要计算资源,还要动态调配,这可以算是一个业界难题了。

大数据,从技术角度看,涉及计算、存储、网络等范围甚广、学习难度大,但却可以发挥重要作用。大数据,从产业角度看,可以显著提升传统企业的运营效率,助力数字化升级;引领全新的商业模式,为新兴企业赢得快速发展机遇……

UCan下午茶关于数据的探讨,虽然暂时告一段落,但企业针对数据的深入探索,似乎才刚刚开始!

640?wx_fmt=gif

640?wx_fmt=gif

展开阅读全文

java串口程序---------------------------------------------------站等高手答疑解惑!!!

04-15

各位高手好,小弟初次接触串口,是一头雾水不知如何下手,在网上找了一些示例,但也还是云里雾里的。rn小弟本次要实现在本地通过串口向对应的LED屏发送实时信息,但是不知道该怎么具体实现?很是苦恼,所以在本地想测试一下网上现成的示例,了解一下串口程序是如何发送信息的过程,但不知如何搭建测试环境,求各位高手指点解惑,感激之情无以言表!谢谢!rn如下是网上现成示例:rn发送程序rn[code=java]import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.comm.*; class S_Frame extends Frame implements Runnable,ActionListener /*检测系统中可用的通讯端口类 */ static CommPortIdentifier portId; /*Enumeration 为枚举型类,在util中 */ static Enumeration portList; OutputStream outputStream; /*RS-232的串行口 */ SerialPort serialPort; Thread readThread; Panel p=new Panel(); TextField in_message=new TextField("打开COM1,波特率9600,数据位8,停止位1."); TextArea out_message=new TextArea(); Button btnOpen=new Button("打开串口, 发送数据"); Button btnClose=new Button("关闭串口, 停止发送数据"); byte data[]=new byte[10240]; /*设置判断要是否关闭串口的标志*/ boolean mark; /*安排窗体*/ S_Frame() super("串口发送数据"); setSize(200,200); setVisible(true); add(out_message,"Center"); add(p,"North"); p.add(btnOpen); p.add(btnClose); add(in_message,"South"); btnOpen.addActionListener(this); btnClose.addActionListener(this); //R_Frame() end /*点击按扭打开串口.*/ public void actionPerformed(ActionEvent event) if (event.getSource()==btnClose) serialPort.close(); //关闭串口 mark=true; //用于中止线程的run()方法 in_message.setText("串口COM1已经关闭,停止发送数据."); else mark=false; /*从文本区按字节读取数据*/ data=out_message.getText().getBytes(); /*打开串口*/ start(); in_message.setText("串口COM1已经打开,正在每2秒钟发送一次数据....."); //actionPerformed() end /*打开串口,并调用线程发送数据*/ public void start() /*获取系统中所有的通讯端口 */ portList=CommPortIdentifier.getPortIdentifiers(); /* 用循环结构找出串口 */ while (portList.hasMoreElements()) /*强制转换为通讯端口类型*/ portId=(CommPortIdentifier)portList.nextElement(); if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL) if (portId.getName().equals("COM1")) /*打开串口 */ try serialPort = (SerialPort) portId.open("ReadComm", 2000); catch (PortInUseException e) /*设置串口输出流*/ try outputStream = serialPort.getOutputStream(); catch (IOException e) //if end //if end //while end /*调用线程发送数据*/ try readThread = new Thread(this); //线程负责每发送一次数据,休眠2秒钟 readThread.start(); catch (Exception e) //start() end /*发送数据,休眠2秒钟后重发*/ public void run() /*设置串口通讯参数*/ try serialPort.setSerialPortParams(9600, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE); catch (UnsupportedCommOperationException e) /*发送数据流(将数组data[]中的数据发送出去)*/ try outputStream.write(data); catch (IOException e) /*发送数据后休眠2秒钟,然后再重发*/ try Thread.sleep(2000); if (mark) return; //结束run方法,导致线程死亡 start(); catch (InterruptedException e) //run() end //类S_Frame end public class SendComm public static void main(String args[]) S_Frame S_win=new S_Frame(); S_win.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); S_win.pack(); [/code]rn接收程序rn[code=java]import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.comm.*; class R_Frame extends Frame implements Runnable,ActionListener,SerialPortEventListener /* 检测系统中可用的通讯端口类 */ static CommPortIdentifier portId; /* Enumeration 为枚举型类,在java.util中 */ static Enumeration portList; InputStream inputStream; /* 声明RS-232串行端口的成员变量 */ SerialPort serialPort; Thread readThread; String str=""; TextField out_message=new TextField("上面文本框显示接收到的数据"); TextArea in_message=new TextArea(); Button btnOpen=new Button("打开串口"); /*建立窗体*/ R_Frame() super("串口接收数据"); setSize(200,200); setVisible(true); btnOpen.addActionListener(this); add(out_message,"South"); add(in_message,"Center"); add(btnOpen,"North"); //R_Frame() end /*点击按扭所触发的事件:打开串口,并监听串口. */ public void actionPerformed(ActionEvent event) /*获取系统中所有的通讯端口 */ portList=CommPortIdentifier.getPortIdentifiers(); /* 用循环结构找出串口 */ while (portList.hasMoreElements()) /*强制转换为通讯端口类型*/ portId=(CommPortIdentifier)portList.nextElement(); if(portId.getPortType() == CommPortIdentifier.PORT_SERIAL) if (portId.getName().equals("COM1")) try serialPort = (SerialPort) portId.open("ReadComm", 2000); out_message.setText("已打开端口COM1 ,正在接收数据..... "); catch (PortInUseException e) /*设置串口监听器*/ try serialPort.addEventListener(this); catch (TooManyListenersException e) /* 侦听到串口有数据,触发串口事件*/ serialPort.notifyOnDataAvailable(true); //if end //if end //while end readThread = new Thread(this); readThread.start(); //线程负责每接收一次数据休眠20秒钟 //actionPerformed() end /*接收数据后休眠20秒钟*/ public void run() try Thread.sleep(20000); catch (InterruptedException e) //run() end /*串口监听器触发的事件,设置串口通讯参数,读取数据并写到文本区中*/ public void serialEvent(SerialPortEvent event) /*设置串口通讯参数:波特率、数据位、停止位、奇偶校验*/ try serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE); catch (UnsupportedCommOperationException e) byte[] readBuffer = new byte[20];try inputStream = serialPort.getInputStream(); catch (IOException e) try /* 从线路上读取数据流 */ while (inputStream.available() > 0) int numBytes = inputStream.read(readBuffer); //while end str=new String(readBuffer); /*接收到的数据存放到文本区中*/ in_message.append(str+"\n"); catch (IOException e) //serialEvent() end //类R_Frame end public class ReadComm public static void main(String args[]) /* 实例化接收串口数据的窗体类 */ R_Frame R_win=new R_Frame(); /* 定义窗体适配器的关闭按钮功能 */ R_win.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); R_win.pack(); [/code]rn以上就是现成的类实现,不知道我在本地要怎么要才能与另外一个测试电脑来测试这个程序,求高手不吝赐教。 论坛

关于普元的微服务架构的答疑解惑

05-20

rnrn[b]摘要[/b]:微服务架构是普元所理解的IT精益运营的四大核心工作之一。普元将IT精益运营视为企业数字化转型的必经之路,针对IT精益运营面临的失真的信息传递、未知的技术欠债、过高的隐性成本、缺乏架构升级的支持、隔离在虚拟社会之外等诸多挑战,普元认为需要通过业务、架构、流程、组织(BAPO)四个方面的变革来应对。架构方面,普元确立了基于微服务的云计算架构的策略。rnrn 今天小编就普元的微服务架构的细节问题和大家聊聊。rnrn[size=18px]1. 是不是普元的微服务架构更聚焦于业务层面?[/size]rnrn 所有都是微服务,所以才要一个统一的资源描述。那个图主要展现了业务层面,你说的当然也要有。以下为新一代的整体架构图:我们希望把内部的组件、需求、设计等过程成果 业务服务都统一的作为资源。所以,在资源的描述上风格需要一致性的风格,rest解决了风格问题,但还是有非常多的细节。例如,微服务的数据完整性处理,就需要在rest表述出来。rnrn[img=https://img-bbs.csdn.net/upload/201605/20/1463728845_483522.png][/img]rnrn[size=18px]2.对于restful来说,get,put,post,delete并不能完整描述这个世界上所有的业务原义,这个怎么解决?[/size]rnrn 如果我们把一切看成资源的话,其实这几个语义足够了。在实践过程中,可以再分为资源和能力(API)两种具体对待。其实,最大的障碍来自我们自己RPC调用的思维太根深蒂固。rest是机器 to 机器之间最好的沟通方式,那我们的设计就应该从机器的角度考虑,就比较容易克服RPC方式的影响了。rnrnrn[size=18px]3 看到普元的架构总图,物联网设备这块儿存在一些实时的数据通讯,这样的业务场景,你们也用rest风格来描述吗?[/size]rnrn 这是个麻烦的问题,rest风格是http的最佳实践,而物联网这块是mqtp等协议,要转换。但是按照我们对rest的设计,他用来描述资源,对于物联网数据的流动,需要有一个在网关上的解耦,我们有个event hub在做这个事情。rnrnrnrn 论坛

关于普元的微服务架构的答疑解惑之二

05-21

rn rn 上期的论坛,没有和大家全部聊完关于普元的微服务架构,今天小编继续和大家聊聊。rnrnrn rn[size=18px]问题一:如何实现接入安全这块能介绍一下吗?[/size]rnrn答:接入安全包括:1. 用了阿里云,这里用了VPC,同时通过自定义安全策略来做(对外服务开通EIP);2. 协议安全,使用加密协议,这次是https,同时通过数字证书等加强能力;3. 管理安全,权限到rest资源和操作,token具有时效性。rnrn[size=18px]问题二:现在应用大多偏向于前后端分离,甚至有的时候前段也承担了一部分后端的能力,这方面是如何通过RestFul解决的?[/size] 我觉得现在的编程风格中,前端与后端的边界越来越模糊了。rnrn答:我们支持分离和合并两种部署模式(开发期分前端和后端组件),但前端一般不承担后端的能力,这是不合理的表现。前后端边界不应该模糊,现在前端、终端技术栈非常多,与后端分工和能力要求是区分很明显的。rnrn[size=18px]问题三:普元云平台中的服务发现是基于什么的?我们现在是基于zookeeper做的,策略是轮询,感觉不是很理想。[/size]rnrn答:我们以前产品里用过zk,现在准备用etcd,客户端集群,策略可以自己定。为什么没有用起来,健康状况,负载情况都是客户端策略的依据。rnrnrnrnrnrnrnrnrn 论坛

熟悉CompanionJS的请进,请帮忙答疑解惑

08-05

[size=10px] 今天调试JavaScript时遇到些问题,于是想找个专业的调试工具来调试,Google了下,很多人推荐CompanionJS,优点是精巧实用。我下载了个来使用,结果遇到很迷惑的问题,CompanionJS没有什么文档,网上只有安装步骤的文章,而且都是千篇一律的,也没有什么文章讨论遇到什么问题的,所以我的问题一直没办法解决,所以来看看CSDN上有没有对CompanionJS比较熟悉的大侠,帮我解决下问题。rn 我的环境:OS —— Windows Server 2003rn IDE—— Visual Studio 2005rn 这是网上的安装步骤:rn 1、先下载Companion.JS安装文件,然后安装。rn 2、下载安装Microsoft Script Debugger,如果您的机器已经安装过了就可以免过这一步。rn 3、打开IE菜单“工具”--“Internet选项”--“高级”,找到“禁用脚本调试(Internet Explorer)”和“禁用脚本调试(在Internet Explorer之外)”,将两个选项前面的对钩都去掉,然后重启IE。rn 4、在Ie中输入:http://www.my-debugbar.com/wiki/uploads/CompanionJS/dummy.htm,然后点击click me链接,如果左上角弹出一个小错误提示或下面控制台出现了错误信息提示,就说明您已经安装成功了。rnrn 我的问题就是在第4步的时候遇到了。我首先安装的是CompanionJS 0.3 ,安装完成后,我点击Click me ,下面的控制台中,错误信息栏到是出现错误信息。但是Source栏始终只有一条提示信息“A new version of Companion.JS can be downloaded on the DEBUGBAR WIKI ”,没有显示JavaScript代码,于是我按照提示信息更新到了最新版本CompanionJS 0.5 ,又有新的问题,Source栏中有了JavaScript代码,但是错误信息栏中却没有错误信息了。rn 一个本来很小巧的工具,却弄的我很头大,如果有熟悉CompanionJS ,请帮我答下疑,谢谢啊谢谢。[/size]rnrn 论坛

没有更多推荐了,返回首页