±à¼ÍƼö: |
±¾ÎÄÀ´Ô´ÍøÂ磬±¾ÎĽ«´Ó´æ´¢¡¢¾ÛºÏ¡¢¸æ¾¯Èý¸ö·½Ãæ½éÉÜ
Hickwall ÔÚºËÐļܹ¹·½ÃæµÄÑݽø,Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£ |
|
¼Ü¹¹Ñݽø¸ÅÊö
ΪÁ˸üºÃµØÁ˽â Hickwall ÔÚºËÐļܹ¹·½ÃæµÄÉè¼Æ£¬ÎÒÃÇÊ×ÏȽ« Hickwall µÚÒ»´úµÄ¼Ü¹¹ºÍÏÖÓмܹ¹½øÐбȽϡ£
Hickwall ×î³õµÄÑз¢ÊÇÔÚ 2015-2016 Ä꣬µ±Ê±ÎÒÃǵ÷ÑÐÁËÒµ½çÖªÃûµÄ¿ªÔ´¼à¿ØÏµÍ³¡£
±ÈÈç Graphite£¬ÓµÓзdz£ºÃµÄÉú̬£¬µ«ÊǼ¯ÈºÅäÖø´ÔÓ£¬Ã¿¸öÖ¸±ê¶¼²ÉÓÃÒ»¸öÎļþ´æ´¢£¬µ¼ÖÂСÎļþ¶à£¬iowait
¸ß£¬²¢ÇÒʹÓà python ʵÏÖ£¬ÐÔÄÜ·½Ã治̫ÁîÈËÂúÒâ¡£
ÔÙ±ÈÈç OpenTSDB£¬»ùÓÚ HBase ÌìÈ»¾ÍÖ§³Ö·Ö²¼Ê½£¬µ«ÊÇÒ²ÊÜÏÞÓÚ HBase£¬¶àά²éѯµÄʱºòÐÔÄܱȽϲ¶øÆäËûµÄ¼à¿ØÏµÍ³Ò²²¢Î´·Ç³£³ÉÊ죬×îºóÎÒÃǾö¶¨Ê¹ÓÃ
ElasticSearch ×÷Ϊ´æ´¢ÒýÇæ¡£ÏÂͼÊǵÚÒ»´úµÄºËÐļܹ¹Í¼¡£

ÔÚÕâ¸ö¼Ü¹¹ÖÐ¼à¿ØÊý¾Ý´Ó Proxy ½øÀ´£¬¾¹ý¸ñʽÕûÀí¡¢Êý¾Ý²¹È«¡¢ÏÞÁ÷ºó·¢Ë͵½ Kafka¡£Donwsample
Ïû·Ñ Kafka ÖеÄÔʼÊý¾Ý½øÐÐʱ¼äά¶ÈÉϵľۺϣ¬¾ÛºÏ³É 5m¡¢15m µÈʱ¼äά¶ÈµÄÊý¾ÝµãÖ®ºóдÈëµ½
Kafka¡£Consumer Ïû·Ñ Kafka ÖеÄÔʼÊý¾ÝºÍ¾ÛºÏÊý¾ÝдÈëµ½ ES£¬Í¨¹ý API-Server
ÌṩͳһµÄ½Ó¿Ú¸ø¿´Í¼ºÍ¸æ¾¯¡£
ÒòΪ ES µÄ²éѯÐÔÄÜÎÞ·¨Âú×ã Trigger ¸ßƵÂʵÄÀÈ¡ÐèÇó£¬ÎÒÃÇÁíÍâÔö¼ÓÁË Redis ÓÃÀ´»º´æ×î½üÒ»¶Îʱ¼äµÄÊý¾ÝÓÃÓڸ澯¡£ÕâÌ׼ܹ¹³õ²½ÊµÏÖÁË¼à¿ØÏµÍ³µÄ¹¦ÄÜ£¬µ«ÊÇÔÚʹÓùý³ÌÖÐÎÒÃÇÒ²·¢ÏÖÒÔϼ¸¸öÎÊÌ⣺
1.×é¼þ¹ý¶à¡£ÔËά¼Ü¹¹×·ÇóµÄÊÇÖÁ¼òÖÁÎÈ£¬¹ý¶àµÄ×é¼þ»áÔö¼Ó²¿ÊðºÍά»¤µÄÄѶȡ£ÁíÍâÔÚÍŶÓÈËÔ±±ä¶¯µÄÇé¿öÏ£¬Ð³ÉÔ±½øÀ´ÎÞ·¨¿ìËÙÉÏÊÖ¡£
2.Êý¾Ý¶Ñ»ý¡£Consumer Ïû·Ñ Kafka ³öÏÖÎÊÌ⣬ÈÝÒ×µ¼ÖÂ
Kafka ÖÐÊý¾Ý¶Ñ»ý£¬Óû§½«ÎÞ·¨¿´µ½ÏßÉÏϵͳµÄµ±Ç°ÊµÊ±×´Ì¬£¬Ö±µ½½«¶Ñ»ýµÄÊý¾ÝÏû·ÑÍê¡£°´ÕÕÎÒÃǵÄʵ¼ù¾Ñ飬Êý¾Ý¶Ñ»ýµÄʱ¼äÍùÍù»áÓм¸Ê®·ÖÖÓ£¬Õâ¶ÔÓÚ»¥ÁªÍøÆóÒµÀ´½²ÊǸö·Ç³£´óµÄÎÊÌâ¡£
3.Êý¾ÝÁ´Ìõ¹ý³¤¡£¼à¿ØÊý¾Ý´Ó Proxy ½øÀ´µ½ Trigger ¸æ¾¯ÐèÒªÒÀ´Î¾¹ý
6 ¸ö×é¼þ£¬ÈκÎÒ»¸ö×é¼þ³öÏÖÎÊÌ⣬¶¼¿ÉÄܵ¼Ö¸澯©¸æ»òÎ󏿡£
ΪÁ˽â¾öÕâЩÎÊÌ⣬ÎÒÃÇÑз¢ÁË Hickwall µÄµÚ¶þ´ú¼Ü¹¹£¬Ê¹ÓÃ×ÔÑÐµÄ Influxdb ¼¯ÈºÈ¡´úÁË
ES ×÷Ϊ´æ´¢ÒýÇæ£¬ÈçÏÂͼ¡£

ÔÚÕâ¸ö¼Ü¹¹ÖÐ¼à¿ØÊý¾Ý´Ó Proxy ½øÀ´·ÖÈý·ת·¢£¬µÚһ··¢Ë͸ø Influxdb ¼¯Èº£¬È·±£ÎÞÂÛ·¢ÉúÈκιÊÕÏ£¬Ö»Òª
Hickwall »Ö¸´Õý³££¬Óû§¾ÍÄÜÁ¢¼´¿´µ½ÏßÉÏϵͳµÄµ±Ç°×´Ì¬¡£
µÚ¶þ··¢Ë͸ø Kafka£¬ÓÉ Downsample Íê³ÉÊý¾Ý¾ÛºÏºó½«¾ÛºÏÊý¾ÝÖ±½ÓдÈëµ½ Influxdb
¼¯Èº¡£µÚÈý··¢Ë͸øÁ÷ʽ¸æ¾¯£¬ÕâÈý·Êý¾Ý»¥²»Ó°Ï죬¼´Ê¹´æ´¢ºÍ¾ÛºÏ¶¼³öÏÖÎÊÌ⣬¸æ¾¯ÒÀÈ»¿ÉÒÔÕý³£¹¤×÷£¬È·±£Á˸澯µÄ¿É¿¿Îȶ¨¡£
Influxdb ¼¯ÈºÉè¼Æ
ES ÓÃÓÚʱ¼äÐòÁд洢´æÔÚ²»ÉÙÎÊÌ⣬ÀýÈç´ÅÅÌʹÓÿռä´ó£¬´ÅÅÌ IO ʹÓö࣬Ë÷Òýά»¤¸´ÔÓ£¬Ð´ÈëºÍ²éѯËÙ¶ÈÂýµÈ¡£
¶ø Influxdb ÊÇÅÅÃûµÚÒ»µÄʱ¼äÐòÁÐÊý¾Ý¿â£¬ÄÜÕë¶Ôʱ¼ä·¶Î§½øÐиßЧµÄ²éѯ£¬Ö§³Ö×Ô¶¯É¾³ý¹ýʱÊý¾Ý£¬½ÏµÍµÄʹÓúÍά»¤³É±¾¡£Ö»ÊÇÔçÆÚµÄ
Influxdb ²»¹»Îȶ¨£¬bug ±È½Ï¶à£¬Ö±µ½ 2017 Äêµ×¡£ÎÒÃǾ¹ý²âÊÔÈ·ÈÏ Influxdb
ÒѾ×ã¹»Îȶ¨¿ÉÒÔ½»¸¶Éú²ú£¬¾ÍÃÈÉúÁËÓà Influxdb Ìæ»» ES µÄÏë·¨¡£µ±È» Influxdb
´æÔÚµ¥µãÎÊÌ⣬ÔÚ 0.12 °æ±¾ÒԺ󣬹ٷ½µÄ¼¯Èº·½°¸»¹±ÕÔ´ÁË¡£
ΪÁ˽â¾ö Influxdb µÄµ¥µãÎÊÌ⣬ÎÒÃÇÑз¢ÁË Influxdb µÄ¼¯Èº·½°¸ Incluster£¬ÈçÏÂͼ¡£

Incluster ²¢Ã»ÓÐ¶Ô Influxdb ½øÐдúÂëÇÖÈëʽµÄÐ޸쬶øÊÇÔÚÉϲãά»¤¹ØÓÚÊý¾Ý·Ö²¼ºÍ²éѯµÄÔªÊý¾Ý£¬Òò´Ëµ±
Influxdb ÓÐÖØ´ó·¢²¼µÄʱºò Incluster Äܹ»¼°Ê±¸üÐÂÊý¾Ý½Úµã¡£
¿Í»§¶Ëͨ¹ý Incluster ½ÚµãдÈëÊý¾Ý£¬Incluster °´ÕÕÊý¾Ý·Ö²¼²ßÂÔ½«Ð´ÈëÇëÇóת·¢µ½Ïà¹ØµÄ
Influxdb ½ÚµãÉÏ£¬²éѯµÄʱºò°´ÕÕÊý¾Ý·Ö²¼²ßÂÔ´Ó¸÷¸ö½ÚµãÉ϶ÁÈ¡Êý¾Ý²¢ºÏ²¢²éѯ½á¹û¡£ÔÚÔªÊý¾ÝÕâÒ»²ã
Incluster ²ÉÓà raft ±£Ö¤ÔªÊý¾ÝµÄÒ»ÖÂÐԺͷÖÇøÈÝ´íÐÔ£¬ÔÚ¾ßÌåÊý¾Ý½ÚµãÉÏʹÓÃÒ»ÖÂÐÔ hash
±£Ö¤Êý¾ÝµÄ¿ÉÓÃÐԺͷÖÇøÈÝ´íÐÔ¡£
Incluster ÌṩÁËÈýÖÖÊý¾Ý·Ö²¼²ßÂÔ Series¡¢Measurement ºÍ Measurement+Tag¡£Í¨¹ýµ÷ÕûÊý¾Ý·Ö²¼²ßÂÔ£¬Incluster
Äܹ»¾¡Á¿×öµ½¼õÉÙÊý¾ÝÈȵ㲢ÔÚ²éѯʱ¼õÉÙ²éѯ½Úµã¡£ÔÚʵ¼ù¹ý³ÌÖУ¬ÎÒÃÇʹÓà Measurement ²ßÂÔÀ´´æ´¢ÏµÍ³Ö¸±ê£¬Èç
CPU£»Ê¹Óà Measurement+Appid ²ßÂÔÀ´´æ´¢ÇëÇóÁ¿¡£
×÷Ϊһ¸ö·Ö²¼Ê½´æ´¢£¬´ÅÅÌË𻵲»¿É±ÜÃ⣬ÔÖ±¸ÊDZØÐ뿼ÂǵÄÎÊÌâ¡£ÎÒÃǰ´ÕÕÊý¾Ý·Ö²¼²ßÂÔͨ¹ý¶ÁÈ¡ Influxdb
µ×²ãµÄ TSM Êý¾ÝÎļþ£¬À´»Ö¸´Ë𻵵ĽڵãÉÏÃæµÄÊý¾Ý¡£Êµ¼ù¾Ñé±íÃ÷ Incluster Äܹ»×öµ½°ë¸öСʱ»Ö¸´Ò»¸öË𻵵Ľڵ㡣

ÔÚÓû§Ê¹Ó÷½Ã棬Incluster ÌṩÁË¶Ô InfluxQL µÄ͸Ã÷Ö§³Ö£¬Ò²ÌṩÁËÀà Graphite
Óï·¨ÓÃÓÚÅäͼ¡£Àà Graphite Óï·¨¿ÉÒÔ¼ò»¯ÅäͼÓï·¨£¬Ìṩ InfluxQL ÎÞ·¨ÊµÏֵŦÄÜ£¬ÀýÈç²éѯ×î½üÒ»¶Îʱ¼ä±ä»¯×î¾çÁÒµÄÖ¸±ê£¬³ý´ËÖ®Í⻹¿ÉÒÔÆÁ±Îµ×²ã´æ´¢Ï¸½Ú£¬ÒÔºóÈç¹ûÏëʹÓñÈ
Influxdb ¸üÓÅÐãµÄʱ¼äÐòÁд洢ÒýÇæ£¬¿ÉÒÔ¼õÉÙÓû§Ç¨ÒƳɱ¾¡£

Êý¾Ý¾ÛºÏµÄ̽Ë÷
Influxdb ÔÚÊý¾Ý´æ´¢ºÍ¼òµ¥²éѯ·½Ãæ±íÏÖ³öÉ«£¬µ«ÊÇÔÚÊý¾Ý¾ÛºÏÉϾʹæÔÚһЩÎÊÌâ¡£
Influxdb ÌṩÁË Continuous Query Language(CQL) ÓÃÓÚÊý¾Ý¾ÛºÏ£¬µ«ÊǾ¹ý²âÊÔ·¢ÏÖ
CQL ÄÚ´æÕ¼Óýϴó¡£Influxdb Ô±¾ÐèÒªµÄÄÚ´æ¾Í²»Ð¡£¬ÔÚÎÒÃÇʹÓùý³ÌÖÐ 128G ÄÚ´æÒѾʹÓÃÁËÒ»°ë£¬Èç¹ûÔÙ¼ÓÉÏ
CQL µÄÄڴ棬ÈÝÒ×Ôì³É½Úµã²»Îȶ¨¡£
ÁíÍâ CQL ÎÞ·¨´Ó²»Í¬µÄ½Úµã»ñÈ¡Êý¾Ý½øÐоۺϣ¬ÔÚ Incluster ¼¯Èº·½°¸ÖдæÔÚ×ÊÔ´ÀË·Ñά»¤¸´ÔÓµÄÎÊÌâ¡£Òò´ËÎÒÃǽ«Êý¾Ý¾ÛºÏ¹¦ÄܶÀÁ¢³öÀ´£¬ÔÚÍⲿ½øÐÐÊý¾Ý¾ÛºÏºóÔÙ½«¾ÛºÏÊý¾ÝдÈëµ½
Incluster¡£
ʱ¼äά¶ÈµÄ¾ÛºÏÊÇÓÐ״̬µÄ¼ÆË㣬ÎÒÃÇÃæÁÙÁ½¸öÎÊÌâ¡£Ò»¸öÊÇÖмä״̬ÈçºÎ¼õÉÙÄÚ´æµÄʹÓã¬ÁíÍâÒ»¸öÊǽڵãÖØÆôµÄʱºòÖмä״̬ÈçºÎ»Ö¸´¡£
ÎÒÃÇͨ¹ýÖ¸¶¨Ã¿¸ö½ÚµãÐèÒªÏû·ÑµÄ Kafka Partition£¬Ê¹µÃÿ¸ö½ÚµãÐèÒª´¦ÀíµÄÊý¾Ý¿É¿Ø£¬±ÜÃâ
KafkaPartition Rebalance µ¼ÖÂÄÚ´æ²»±ØÒªµÄʹÓã¬ÁíÍâͨ¹ý¶Ô Measurement
ºÍ Tag ÕâЩ×Ö·û´®µÄÈ¥ÖØ¿ÉÒÔ¼õÉÙÄÚ´æÊ¹Óá£Öмä״̬»Ö¸´·½ÃæÎÒÃDz¢Ã»ÓÐʹÓñ£´æ CheckPoint
µÄ·½·¨£¬¶øÊÇͨ¹ýÌáǰһ¶Îʱ¼äÏû·ÑÀ´»Ö¸´Öмä״̬¡£ÕâÖÖ·½Ê½±ÜÃâÁ˱£´æ CheckPoint ´øÀ´µÄ×ÊÔ´ËðºÄ¡£
ÒµÎñ³¡¾°¾ÛºÏÖ÷ÒªµÄÌôÕ½ÔÚÓÚÒ»´Î¾ÛºÏÉæ¼°µ½µÄÖ¸±êÊýÌ«¶à£¬¾ÛºÏÂß¼¸´ÔÓ¡£ÀýÈçij¸öÓ¦ÓõÄij¸ö½Ó¿ÚµÄÇëÇó³É¹¦ÂÊ£¬Éæ¼°µ½µÄÖ¸±êÊýÄ¿ÉÏǧ£¬ÕâÖ־ۺϲéѯ
Influxdb ÎÞ·¨Ö§³ÖµÄ¡£
ÎÒÃǵĽâ¾ö·½°¸ÊÇʹÓà ClickHouse ½øÐÐÔ¤¾ÛºÏ¡£ClickHouse ÊǶíÂÞ˹¿ªÔ´µÄÃæÏò
OLAP µÄ·Ö²¼Ê½ÁÐʽÊý¾Ý¿â£¬ÓµÓм«¸ßµÄ¶ÁдÐÔÄÜ£¬²¢ÌṩÁËÇ¿´óµÄ SQL ÓïÑԺͷḻµÄÊý¾Ý´¦Àíº¯Êý£¬¿ÉÒÔÍê³ÉºÜ¶àÖ¸±êµÄ´¦Àí£¬ÀýÈç
P95¡£
Á÷ʽ¸æ¾¯µÄʵÏÖ
¸æ¾¯×î¼òµ¥µÄʵÏÖ¾ÍÊǶ¨Ê±´ÓÊý¾Ý¿âÖÐÀÈ¡Êý¾Ý£¬È»ºó¼ì²éÒ»ÏÂÊý¾ÝÊÇ·ñÓÐÒì³£¡£µ«ÊÇÕâÖÖ Pull µÄ·½Ê½¶Ô´æ´¢´æÔÚÒ»¶¨µÄѹÁ¦£¬ÓÈÆäÊǸ澯¹æÔò¸æ¾¯¶ÔÏóÖÚ¶àµÄʱºò£¬¶Ô´æ´¢µÄ¿É¿¿ÐÔºÍÏìӦʱ¼äÓм«¸ßµÄÒªÇó¡£
ÎÒÃǾ¹ýÑо¿·¢Ïָ澯Êý¾ÝÔÚËùÓÐ¼à¿ØÊý¾ÝÖÐÕ¼±ÈÆäʵ²»´ó£¬ÒÔЯ³ÌΪÀýÖ»Õ¼ÁË 8%£¬¶øÇÒÐèÒªµÄ¾ø´ó²¿·Ö¶¼ÊÇ×î½ü¼¸·ÖÖÓµÄÊý¾Ý£¬Èç¹ûÎÒÃÇÄÜ´ÓÊý¾ÝÁ÷ÖÐÖ±½Ó»ñÈ¡ËùÐèÒªµÄÊý¾Ý£¬¾ÍÄܹýÂ˵ô´ó²¿·Ö²»±ØÒªµÄÊý¾Ý£¬±ÜÃâ¶Ôºǫ́´æ´¢µÄÒÀÀµ£¬Èø澯±äµÃ¸ü¼Ó¿É¿¿ÊµÊ±¡£
ʵÏÖÁ÷ʽ¸æ¾¯×î´óµÄÌôÕ½ÊÇÊý¾Ý¶©ÔÄ¡£ÎÒÃDz»¿ÉÄÜÈÃÿһ¸ö¸æ¾¯¹æÔò¶¼È¥Ïû·ÑÒ»±éÊý¾ÝÁ÷£¬×îºÃµÄ·½Ê½ÊÇÏû·ÑÒ»±éÊý¾ÝÁ÷È»ºó½«¸æ¾¯Êý¾Ý׼ȷµÄ·Ö·¢µ½¸æ¾¯ÉÏÏÂÎÄÖС£
ÔÚÕâÀïÈçºÎ½µµÍÊý¾Ý·Ö·¢µÄʱ¼ä¸´ÔӶȺͿռ临ÔÓ¶ÈÊÇ×î´óµÄÄѵ㡣
Hickwall µÄʵÏÖ˼·ÊǼõÖ稣¬Í¨¹ý Measurement ¾«È·Æ¥Åä¼õÉÙÏÂÒ»²½ÐèҪƥÅäµÄ¹æÔòÊýÁ¿£¬Í¨¹ý
tagValue µÄ²¼Â¡¹ýÂËÆ÷ÅжÏÊÇÄĸö Trigger ½ÚµãÐèÒªµÄÊý¾Ý¡£Trigger ½ÚµãÊÕµ½Êý¾ÝÒÔºó¶ÔÊý¾Ýµã½øÐо«È·µÄÆ¥Åä¹ýÂË£¬×ª·¢µ½¾ßÌåµÄ¸æ¾¯ÉÏÏÂÎÄÖС£
Õâ¸ö·½°¸µÄÓÅÊÆÔÚÓÚʱ¼ä¸´ÔӶȲ»Ëæ¹æÔòÊýÁ¿¸æ¾¯¶ÔÏó¶øÏßÐÔÔö³¤£¬¿Õ¼ä¸´ÔӶȲ»Ëæ tagValue µÄ³¤¶È¶øÔö³¤¡£

Hickwall ʹÓà Akka ¿ò¼Ü½øÐи澯Âß¼ºÍ¸æ¾¯Êý¾ÝµÄ´¦Àí¡£Akka ÊÇÒì²½¸ß²¢·¢µÄ¿ò¼Ü£¬ÌṩÁË
Actor ±à³ÌÄ£ÐÍ£¬Äܹ»ÇáËÉʵÏÖ²¢·¢µØ´¦ÀíÊý¾ÝºÍÖ´Ðи澯Âß¼¡£
Éú²úϵͳÊǸöʱ¿Ì±ä»¯µÄϵͳ£¬Ã¿Ê±Ã¿¿Ì¶¼¿ÉÄÜÓлúÆ÷ÉÏÏÂÏߣ¬Ã¿Ê±Ã¿¿Ì¶¼¿ÉÄÜÓÐÓ¦Ó÷¢²¼±ä¸ü£¬Ëæ×ÅÕâЩ±ä¶¯¸æ¾¯ÏµÍ³ÐèÒªËæÖ®Ôöɾ¸æ¾¯¶ÔÏóºÍÐ޸ĸ澯ãÐÖµ¡£¶ø
Actor µÄ´´½¨É¾³ýÊǷdz£ÇáÁ¿µÄ£¬ÎªÉú²úϵͳÌṩÁ˷dz£ÓѺõijéÏ󣬽µµÍÁË¿ª·¢³É±¾¡£
Hickwall ʹÓÃÁË RocksDB À´»º´æ¸æ¾¯Êý¾Ý£¬Í¨¹ý JNI Ö±½ÓǶÈëµ½ Trigger
ʵÀýÖС£RocksDB ÊÇ Facebook ¿ªÔ´µÄ KV Êý¾Ý¿â£¬»ùÓÚ Google µÄ LevelDB
½øÐÐÁ˶þ´Î¿ª·¢£¬µ×²ã´æ´¢Ê¹Óà LSM Tree£¬ÓµÓм«¸ßµÄдÈëËÙÂÊ¡£
ÎÞÍ£Ö͵Ĵ¦ÀíÊý¾ÝÔÚÁ÷ʽ¸æ¾¯ÖÐÊǷdz£ÖØÒªµÄ£¬Ê¹Óà RocksDB Äܹ»¼õÉÙ JVM ÖеĶÔÏ󣬼õÉÙÄÚ´æµÄʹÓ㬽ø¶ø¼õÉÙÁË
JVM GC µÄѹÁ¦¡£

ÔÚÓû§Ê¹Ó÷½Ã棬Hickwall ÌṩÁË»ùÓÚ JS Óï·¨µÄ DSL ÓïÑÔ£¬Init DSL ¸ºÔðÊý¾ÝµÄ¶©ÔĺͽÓÊÕµ½Êý¾ÝºóµÄ´¦Àí¹¤×÷£¬ÌṩÁË
groupBy¡¢filter¡¢exclude¡¢summarize µÈÁ÷ʽ¼ÆËãÖг£¼ûµÄÊý¾Ý´¦Àíº¯Êý£¬Run
DSL ¸ºÔð¾ßÌåµÄ¸æ¾¯Âß¼£¬ÅжÏÊÇ·ñÓÐÒì³£¡£
¿¼Âǵ½ DSL ÊéдÓÐÒ»¶¨µÄÄѶȣ¬Hickwall ÌṩÁËÓï·¨¼ì²é¡¢ÀúÊ·Êý¾Ý»Ø²âµÈ¹¦ÄÜ£¬°ïÖúÓû§Êéд³ö·ûºÏÐèÇóµÄ¸æ¾¯Âß¼¡£

|