เฉลี่ยเคลื่อนที่ กราไฟท์
ฉันพยายามที่จะแสดงกราฟแกรไฟต์ที่มี movingAverage ของผลรวมของ HitCount ของตัวชี้วัดที่แตกต่างกันหลาย target. I นี้คาดหวังว่า movingAverage ของเป้าหมายที่จะทำงานได้ดีเกินไป แต่ฉันได้รับหวั่นไม่มีภาพข้อมูล แทนการส่งออกรูปแบบ JSON doesn t ให้ข้อมูลที่เป็นประโยชน์ในกรณีนี้อย่างใดอย่างหนึ่งโชคไม่ดีที่กลับมาง่ายๆฉันสามารถคำนวณค่าเฉลี่ยเคลื่อนที่ของผลรวมข้างต้นในแกรไฟต์ฉันได้ลองต่อไปนี้โดยไม่ต้องโชคดีเช่นกันขอขอบคุณสำหรับความช่วยเหลือของคุณ Grafana ไม่ การคำนวณตัวเองก็แค่แบบสอบถามแบ็กเอนด์และวาดแผนภูมิที่ดีดังนั้นความสามารถในการรวมขึ้นอยู่กับ แต่เพียงผู้เดียวของคุณในขณะที่กราไฟท์สนับสนุนฟังก์ชั่น windowing เช่นค่าเฉลี่ยเคลื่อนที่ InfluxDB ปัจจุบัน doesn t สนับสนุน it. There มีค่อนข้างมากขอย้ายเฉลี่ยใน influxdb ใน เว็บคุณสามารถปล่อยให้ความคืบหน้าของคุณ 1 และติดตามความคืบหน้าในการแก้ปัญหานี้ ticket. Pable ยังไม่ง่ายดังนั้นเพื่อสร้าง cron สคริปต์ที่กำหนดเอง daemon, สิ่งที่จะ pre - calcuate MA และบันทึกไว้ในเป็น ชุดของ sprxdb ที่ใช้กันอย่างแพร่หลาย Grafana สนับสนุนการเพิ่ม movingAverage ฉันยังมีช่วงเวลาที่ยากลำบากในการค้นหาเอกสาร แต่คุณค่อนข้างพอใจกับการใช้งานในหน้าบทนำของคุณลักษณะซึ่งเป็นเรื่องปกติคลิกที่ชื่อกราฟแก้ไขเพิ่มเมตริก movingAverage ตามที่อธิบายไว้ในเอกสารแกรไฟต์กราฟบอกค่าเฉลี่ยเคลื่อนที่ของเมตริกหรือเมตริกมากกว่าจำนวนจุดที่ผ่านมาหรือช่วงเวลาใช้เมตริกหนึ่งชุดหรือชุดอักขระตัวแทนตามด้วยหมายเลข N ของ datapoints หรือสตริงที่ยกมาด้วย ระยะเวลาเช่น 1 ชั่วโมงหรือ 5 นาทีดูจากจนกระทั่งใน renderapi สำหรับตัวอย่างของรูปแบบเวลากราฟค่าเฉลี่ยของ datapoints ก่อนหน้าสำหรับแต่ละจุดบนกราฟข้อมูลทั้งหมดที่ระบุไว้ก่อนหน้านี้ถูกตั้งค่าเป็น None ที่จุดเริ่มต้นของกราฟกราฟต์ 1 แสดงสองค่า งานง่ายสวยเก็บตัวเลขที่เปลี่ยนแปลงตลอดเวลาและกราฟพวกเขามีจำนวนมากซอฟต์แวร์ที่เขียนขึ้นในช่วงหลายปีที่จะทำสิ่งเดียวกันนี้สิ่งที่ทำให้กราไฟท์ที่ไม่ซ้ำกันก็คือว่ามันมีฟังก์ชั่นนี้ เป็นบริการเครือข่ายที่ใช้งานได้ง่ายและสามารถปรับขนาดได้อย่างมากโปรโตคอลสำหรับป้อนข้อมูลลงในแกรไฟต์ง่ายพอที่คุณจะได้เรียนรู้ที่จะทำมันด้วยมือเพียงไม่กี่นาทีไม่ว่าคุณจะต้องการ แต่ก็เป็นสารละลายสีส้มที่ดี เพื่อความเรียบง่ายกราฟการแสดงผลและการดึงจุดข้อมูลทำได้ง่ายเหมือนกับการเรียก URL ซึ่งทำให้เป็นธรรมชาติมากในการรวม Graphite เข้ากับซอฟต์แวร์อื่น ๆ และช่วยให้ผู้ใช้สามารถสร้างแอพพลิเคชันที่มีประสิทธิภาพด้านบนของ Graphite ได้การใช้ Graphite ที่ใช้บ่อยที่สุดคือการสร้างเว็บ แดชบอร์ดสำหรับการตรวจสอบและวิเคราะห์แกรไฟต์เกิดขึ้นในสภาพแวดล้อมอีคอมเมิร์ซที่มีปริมาณมากและการออกแบบของ บริษัท สะท้อนให้เห็นถึงความสามารถในการปรับขนาดและการเข้าถึงข้อมูลแบบเรียลไทม์นี้เป็นเป้าหมายหลักส่วนประกอบต่างๆที่ทำให้ Graphite สามารถบรรลุเป้าหมายเหล่านี้ ได้แก่ ไลบรารีฐานข้อมูลเฉพาะและ รูปแบบสตอเรจกลไกแคชสำหรับการเพิ่มประสิทธิภาพการปฏิบัติการ IO และวิธีการที่เรียบง่าย แต่มีประสิทธิภาพในการจัดกลุ่มเซิร์ฟเวอร์ Graphite แทนการอธิบายวิธีการทำงานของแกรไฟต์ วันนี้ผมจะอธิบายว่าแกรไฟต์ถูกนำมาใช้ในขั้นต้นค่อนข้างไร้เดียงสาปัญหาที่ฉันวิ่งเข้าไปในและวิธีการที่ฉันคิดค้นแก้ปัญหาให้กับพวกเขา 7 1 ไลบรารีฐานข้อมูลที่จัดเก็บข้อมูลแบบเวลา - Graphite ถูกเขียนขึ้นทั้งหมดใน Python และประกอบด้วยสามองค์ประกอบหลัก ไลบรารีฐานข้อมูลชื่อกระซิบเดมอนสิ้นหลังที่ชื่อว่าคาร์บอนและ webapp แบบหน้าเว็บที่แสดงผลกราฟและมี UI พื้นฐานในขณะที่กระซิบเขียนขึ้นเฉพาะสำหรับกราไฟท์ก็สามารถใช้งานได้อย่างอิสระด้วยเช่นกันการออกแบบเป็นแบบ round - Robin ฐานข้อมูลที่ใช้โดย RRDtool และจัดเก็บเฉพาะข้อมูลตัวเลขแบบอนุกรมเรามักจะคิดว่าฐานข้อมูลเป็นกระบวนการของเซิร์ฟเวอร์ที่แอ็พพลิเคชันไคลเอ็นต์พูดคุยกับซ็อกเก็ตกระนั้นกระซิบเหมือน RRDtool เป็นไลบรารีฐานข้อมูลที่ใช้โดยแอ็พพลิเคชันเพื่อจัดการและเรียกข้อมูลที่เก็บไว้ ในไฟล์รูปแบบพิเศษการกระซิบขั้นพื้นฐานที่สุดคือการสร้างไฟล์กระซิบใหม่ปรับปรุงเพื่อเขียนจุดข้อมูลใหม่ลงในแฟ้มและดึงข้อมูลเพื่อดึงข้อมูลจุด e 7 1 Basic กายวิภาคของเสียงกระซิบ File ดังแสดงในรูปที่ 7 1 ไฟล์กระซิบประกอบด้วยส่วนหัวมี metadata ต่างๆตามด้วยหนึ่งหรือหลายส่วนเก็บแต่ละเก็บเป็นลำดับของจุดข้อมูลติดต่อกันซึ่งเป็น timestamp คู่ค่าเมื่อ การดำเนินการปรับปรุงหรือดึงข้อมูลจะดำเนินการกระซิบกำหนดชดเชยในแฟ้มที่ข้อมูลควรจะเขียนหรืออ่านจากตาม timestamp และการกำหนดค่าที่เก็บถาวร 7 2 Back End บริการจัดเก็บข้อมูลที่เรียบง่ายปลายกลับไปที่กราฟฟิคเป็น daemon process เรียกว่าคาร์บอนแคช (carbon-cache) โดยปกติจะเรียกว่าคาร์บอน (carbon-cache) ซึ่งเรียกได้ว่าเป็นคาร์บอน (carbon) ซึ่งเรียกได้ว่าเป็นคาร์บอน (carbon) ซึ่งถูกสร้างขึ้นบน Twisted ซึ่งเป็นโครงสร้างแบบ IO ที่ขับเคลื่อนด้วยเหตุการณ์สำหรับ Python Twisted ช่วยให้คาร์บอนสามารถสื่อสารกับลูกค้าจำนวนมากและรองรับปริมาณการ รูปที่ 7 2 แสดงการไหลเวียนของข้อมูลระหว่างเสียงกระซิบคาร์บอนและแอพพลิเคชัน webapp Client จะรวบรวมข้อมูลและส่งไปที่ปลายด้านหลัง Graphite คาร์บอนซึ่งจัดเก็บข้อมูลโดยใช้กระซิบข้อมูลนี้จะเป็นข้อมูลของเรา ed โดย Graphite Webapp เพื่อสร้างกราฟรูปที่ 7 2 Data Flow ฟังก์ชันหลักของคาร์บอนคือการจัดเก็บจุดข้อมูลสำหรับเมตริกที่จัดเตรียมโดยลูกค้าในคำศัพท์ของ Graphite เมตริกคือปริมาณที่สามารถวัดได้ซึ่งสามารถเปลี่ยนแปลงได้ตลอดเวลาเช่นการใช้ CPU ของ เซิร์ฟเวอร์หรือจำนวนการขายผลิตภัณฑ์จุดข้อมูลเป็นเพียงการประทับเวลาคู่ค่าที่สอดคล้องกับค่าที่วัดได้ของเมตริกเฉพาะใด ๆ ณ จุดใดจุดหนึ่งเมตริกจะถูกระบุด้วยชื่อของพวกเขาและชื่อของเมตริกแต่ละตัวด้วย เนื่องจากแอ็พพลิเคชันไคลเอ็นต์เป็นแอ็พพลิเคชันไคลเอ็นต์แอ็พพลิเคชันไคลเอ็นต์แบบทั่วไปคือตัวแทนการตรวจสอบที่รวบรวมเมตริกระบบหรือแอ็พพลิเคชันและส่งค่าที่เก็บรวบรวมไปยังคาร์บอนเพื่อการเก็บข้อมูลและการสร้างภาพได้ง่ายเมตริกในแกรไฟต์มีชื่อตามลำดับชั้นแบบเดียวกับเส้นทางของไฟล์ ยกเว้นว่าจุดที่ใช้ในการกำหนดลำดับชั้นแทนที่จะเป็นเครื่องหมายทับหรือเครื่องหมายทับขวาจะถือว่าชื่อตามกฎหมายและสร้างไฟล์กระซิบสำหรับแต่ละเมตริกไปที่ st แร่จุดข้อมูลแฟ้มเสียงกระซิบถูกเก็บไว้ภายในไดเรกทอรีข้อมูลคาร์บอนในลำดับชั้นของระบบแฟ้มที่สะท้อนลำดับชั้นที่คั่นด้วยจุดในชื่อแต่ละเมตริกเพื่อให้ตัวอย่างเช่นเมื่อแผนที่ต้องการเมื่อโปรแกรมประยุกต์ไคลเอ็นต์ต้องการส่งจุดข้อมูลไปยังกราไฟท์ ต้องสร้างการเชื่อมต่อ TCP กับคาร์บอนโดยปกติจะใช้พอร์ต 2003 2 ไคลเอ็นต์ทำคาร์บอนที่พูดทั้งหมดไม่ได้ส่งข้อมูลใด ๆ เหนือการเชื่อมต่อไคลเอ็นต์จะส่งจุดข้อมูลในรูปแบบข้อความธรรมดาง่ายๆในขณะที่การเชื่อมต่ออาจถูกเปิดทิ้งไว้และใช้ซ้ำเป็น รูปแบบเป็นบรรทัดข้อความต่อจุดข้อมูลที่แต่ละบรรทัดประกอบด้วยชื่อเมตริกค่าและลำดับเวลาของ Unix ที่คั่นด้วยช่องว่างตัวอย่างเช่นไคลเอ็นต์อาจส่งข้อมูลในระดับสูงคาร์บอนทั้งหมดจะรับฟังข้อมูล ในรูปแบบนี้และพยายามเก็บไว้ในดิสก์โดยเร็วที่สุดโดยใช้กระซิบต่อมาเราจะพูดถึงรายละเอียดของเทคนิคบางอย่างที่ใช้เพื่อให้แน่ใจว่า scalability และได้รับประสิทธิภาพที่ดีที่สุดที่เราสามารถออกจากฮาร์ดไดรฟ์ทั่วไป 7 3 Fro nt End Graphs On-Demand Graphite webapp ช่วยให้ผู้ใช้สามารถร้องขอกราฟที่กำหนดเองโดยใช้พารามิเตอร์ API Graph แบบ URL ตามที่ระบุไว้ในสตริงข้อความค้นหาของคำขอ GET และภาพ PNG จะถูกส่งคืนในการตอบสนองตัวอย่างเช่น URL . ขอรับกราฟ 500 300 สำหรับเมตริกและข้อมูลที่ผ่านมา 24 ชั่วโมงแท้จริงแล้วมีเพียงพารามิเตอร์เป้าหมายเท่านั้นที่จำเป็นต้องใช้ข้อมูลอื่นทั้งหมดเป็นตัวเลือกและใช้ค่าเริ่มต้นของคุณหากถูกละไว้กราฟฟิคสนับสนุนตัวเลือกการแสดงผลที่หลากหลายรวมทั้งการจัดการข้อมูล ฟังก์ชันที่ทำตามไวยากรณ์การทำงานที่เรียบง่ายตัวอย่างเช่นเราสามารถกราฟค่าเฉลี่ยเคลื่อนที่ 10 จุดของเมตริกในตัวอย่างก่อนหน้าของเราเช่น this. Functions สามารถซ้อนกันเพื่อให้สามารถนิพจน์และการคำนวณที่ซับซ้อนได้นี่เป็นอีกตัวอย่างหนึ่งที่ให้ผลรวมที่รัน ของยอดขายในแต่ละวันโดยใช้เมตริกต่อผลิตภัณฑ์สำหรับยอดขายต่อนาทีฟังก์ชัน sumSeries คำนวณชุดเวลาซึ่งเป็นผลรวมของเมตริกแต่ละแบบที่ตรงกับรูปแบบจากนั้นจึงคำนวณยอดรวมที่ใช้งานได้ทั้งหมด กว่านับต่อนาทีจากที่นี่ไม่ยากที่จะจินตนาการว่าจะสร้างเว็บ UI เพื่อดูและจัดการกับกราฟได้อย่างไร Graphite มาพร้อมกับ UI Composer ของตัวเองซึ่งแสดงในรูปที่ 7 3 ซึ่งใช้ Javascript ในการแก้ไขกราฟ s พารามิเตอร์ URL เมื่อผู้ใช้คลิกผ่านเมนูของคุณลักษณะที่มีอยู่รูปที่ 7 3 Graphite s Composer Interface.7 4 Dashboards เนื่องจาก Graphite ถูกใช้เป็นเครื่องมือในการสร้างแดชบอร์ดบนเว็บ URL API ทำให้เกิดกรณีการใช้งานตามธรรมชาติ การสร้างหน้าแดชบอร์ดทำได้ง่ายๆเพียงแค่ทำให้หน้าเว็บ HTML เต็มไปด้วยแท็กเช่นนี้อย่างไรก็ตามทุกคนไม่ชอบการสร้าง URL ด้วยมือดังนั้น Graphite's Composer UI จึงมีวิธีการแบบจุดและคลิกเพื่อสร้างกราฟที่คุณสามารถคัดลอกได้ และวาง URL เมื่อคู่กับเครื่องมืออื่นที่ช่วยให้สามารถสร้างหน้าเว็บแบบวิกิพีเดียได้อย่างรวดเร็วกลายเป็นเรื่องง่ายพอที่ผู้ใช้ที่ไม่ใช้เทคนิคสามารถสร้างหน้าแดชบอร์ดของตนเองได้อย่างสวยหรูได้อย่างง่ายดาย 5 Bottleneck. Once ที่ชัดเจนเมื่อผู้ใช้ของฉันเริ่มต้นสร้าง dashboa rds, Graphite ได้อย่างรวดเร็วเริ่มมีปัญหาเกี่ยวกับประสิทธิภาพการทำงานฉันได้ตรวจสอบเว็บเซิร์ฟเวอร์บันทึกเพื่อดูสิ่งที่ขอถูก bogging ลงมันก็เห็นได้ชัดว่าปัญหาคือจำนวนที่แท้จริงของการร้องขอกราฟ webapp ถูก CPU-bound กราฟการแสดงผลอย่างต่อเนื่องผมสังเกตเห็นว่า มีหน้าจอแดชบอร์ดจำนวนมากเหมือนกันและลองจินตนาการว่าคุณมีหน้าแดชบอร์ดที่มีกราฟ 10 รูปและหน้าเว็บจะรีเฟรชทุกๆนาทีทุกครั้งที่ผู้ใช้เปิดแดชบอร์ดในเบราว์เซอร์ของตน Graphite จะต้องจัดการคำขออีก 10 ครั้ง ต่อนาทีนี้อย่างรวดเร็วกลายเป็นแพงวิธีการแก้ปัญหาง่ายๆคือการแสดงผลกราฟแต่ละครั้งเพียงครั้งเดียวและจากนั้นให้บริการสำเนาของมันให้กับผู้ใช้แต่ละกรอบเว็บ Django ซึ่งกราไฟท์ที่สร้างขึ้นบนมีกลไกแคชที่ยอดเยี่ยมที่สามารถใช้ปลายกลับต่างๆเช่น memcached Memcached 3 เป็นหลักตารางแฮชที่ให้บริการเครือข่ายแอ็พพลิเคชัน Client สามารถรับและกำหนดคู่คีย์ - ค่าเช่นเดียวกับตารางแฮชธรรมดาประโยชน์หลักของการใช้ memcac hed คือผลของการร้องขอที่มีราคาแพงเช่นการแสดงผลกราฟสามารถจัดเก็บได้อย่างรวดเร็วและเรียกใช้ภายหลังเพื่อจัดการกับคำขอที่ตามมาเพื่อหลีกเลี่ยงการคืนกราฟที่เหมือนกันตลอดไป memcached สามารถกำหนดค่าให้หมดอายุกราฟที่เก็บไว้หลังจากช่วงเวลาสั้น ๆ ใช้เวลาเพียงไม่กี่วินาทีภาระที่จะเกิดขึ้น Graphite เป็นเรื่องใหญ่เนื่องจากคำขอที่ซ้ำกันเป็นเรื่องธรรมดาดังนั้นกรณีทั่วไปที่สร้างคำขอแสดงผลจำนวนมากก็คือเมื่อผู้ใช้ปรับแต่งตัวเลือกการแสดงผลและใช้ฟังก์ชันต่างๆใน UI Composer แต่ละครั้งที่ผู้ใช้ สิ่งที่เปลี่ยนแปลงบางอย่าง Graphite ต้องวาดกราฟข้อมูลเดียวกันจะมีส่วนเกี่ยวข้องในแต่ละคำขอดังนั้นจึงควรใส่ข้อมูลพื้นฐานลงใน memcache ด้วยเช่นกันซึ่งจะช่วยให้ UI ตอบสนองต่อผู้ใช้เนื่องจากขั้นตอนการเรียกข้อมูลจะข้ามไป 7 6 การเพิ่มประสิทธิภาพ ฉัน O. คิดว่าคุณมีเมตริก 60,000 เมตริกที่คุณส่งไปยังเซิร์ฟเวอร์ Graphite ของคุณและแต่ละเมตริกเหล่านี้มีจุดข้อมูล 1 จุดต่อนาทีโปรดจำไว้ว่าแต่ละเมตริกมี ไฟล์เสียงกระซิบของตัวเองในระบบแฟ้มซึ่งหมายความว่าคาร์บอนต้องดำเนินการเขียนหนึ่งครั้งถึง 60,000 ไฟล์ในแต่ละนาทีตราบใดที่คาร์บอนสามารถเขียนไฟล์หนึ่งไฟล์ต่อหนึ่งมิลลิวินาทีก็ควรจะสามารถติดตามได้ไม่มากเกินไป คุณมีเมตริก 600,000 เมตริกอัปเดตในแต่ละนาทีหรือเมตริกของคุณอัปเดตทุกวินาทีหรือคุณอาจไม่สามารถจัดเก็บได้อย่างรวดเร็วไม่ว่ากรณีใด ๆ สมมติว่าอัตราของจุดข้อมูลขาเข้าสูงกว่าอัตราการเขียนข้อมูลที่เก็บข้อมูลของคุณสามารถติดตามได้ ควรจัดการกับสถานการณ์นี้ฮาร์ดไดร์ฟส่วนใหญ่วันนี้มีเวลาในการค้นหาช้า 4 นั่นคือความล่าช้าระหว่างการทำ IO ในสองตำแหน่งที่แตกต่างกันเมื่อเทียบกับการเขียนลำดับของข้อมูลซึ่งหมายความว่าการเขียนต่อเนื่องกันมากขึ้นเราทำมากขึ้น เราได้รับ แต่ถ้าเรามีไฟล์นับพันไฟล์ที่ต้องเขียนบ่อยๆและการเขียนแต่ละอันมีขนาดเล็กมากจุดข้อมูลกระซิบเพียง 12 ไบต์แล้วดิสก์ของเราจะใช้จ่ายเป็นจำนวนมาก st ของเวลาที่กำลังมองหาทำงานภายใต้สมมติฐานที่ว่าอัตราการเขียนการดำเนินงานมีเพดานค่อนข้างต่ำวิธีเดียวที่จะเพิ่มจุดข้อมูลของเรา throughput เกินอัตราที่จะเขียนข้อมูลหลายจุดในการเขียนเดียวเป็นไปได้เพราะกระซิบ จัดเรียงจุดข้อมูลต่อเนื่องกันบนดิสก์ดังนั้นฉันจึงเพิ่มฟังก์ชั่น updatemany เพื่อกระซิบซึ่งจะนำรายชื่อของจุดข้อมูลสำหรับเมตริกเดียวและ compacts จุดข้อมูลที่ต่อเนื่องในการดำเนินการเขียนเดียวแม้ว่านี้ทำให้แต่ละเขียนใหญ่ขึ้นความแตกต่างในเวลาที่ใช้ การเขียนข้อมูลสิบจุด 120 ไบต์เมื่อเทียบกับหนึ่งจุดข้อมูล 12 ไบต์เป็นสำคัญจะใช้เวลาไม่น้อยกว่าจุดข้อมูลก่อนที่ขนาดของการเขียนแต่ละครั้งจะเริ่มมีผลกระทบต่อการ latency. Next ฉันใช้กลไก buffering ในคาร์บอนแต่ละจุดข้อมูลขาเข้าได้รับการแมป ไปยังคิวตามชื่อเมตริกและจะถูกผนวกเข้ากับคิวนั้นอีกเธรดหนึ่งซ้ำ ๆ ซ้ำ ๆ ผ่านคิวทั้งหมดและสำหรับแต่ละแถว ดึงจุดข้อมูลทั้งหมดออกและเขียนข้อความเหล่านี้ไปยังไฟล์เสียงกระซิบที่เหมาะสมด้วยการอัพเดตกลับไปที่ตัวอย่างของเราถ้าเรามีเมตริก 600,000 เมตริกอัพเดตทุกนาทีและหน่วยเก็บข้อมูลของเราสามารถติดตามได้เพียง 1 ครั้งต่อหนึ่งมิลลิวินาทีแล้วคิวจะสิ้นสุดลง การเก็บข้อมูลประมาณ 10 จุดโดยเฉลี่ยทรัพยากรเพียงอย่างเดียวนี้ทำให้เราเป็นหน่วยความจำซึ่งมีความอุดมสมบูรณ์ค่อนข้างมากเนื่องจากจุดข้อมูลแต่ละแห่งมีเพียงไม่กี่ไบต์กลยุทธ์นี้จะเก็บบัฟเฟอร์แบบไดนามิกให้มากที่สุดเท่าที่จำเป็นเพื่อรักษาอัตราการป้อนข้อมูลที่อาจเกิน อัตราของการดำเนินการ IO การจัดเก็บข้อมูลของคุณสามารถให้ทันกับประโยชน์ที่ดีของวิธีนี้คือการเพิ่มระดับของความยืดหยุ่นในการจัดการชะลอ IO ชั่วคราวหากระบบต้องการทำ IO อื่น ๆ นอก Graphite แล้วมีโอกาสที่อัตราของ การเขียนข้อมูลจะลดลงซึ่งในกรณีนี้ลำดับของคาร์บอนจะเติบโตขึ้นคิวที่มีขนาดใหญ่มากขึ้นเนื่องจากการเขียนข้อมูลโดยรวมจะมีค่าเท่ากับอัตราเร็วของ w การดำเนินพิธีกรรมครั้งขนาดเฉลี่ยของการเขียนแต่ละคาร์บอนสามารถรักษาได้ตราบเท่าที่มีหน่วยความจำเพียงพอสำหรับคิวกลไกการเข้าคิวของคิวถูกแสดงในรูปที่ 7 4. รูปที่ 7 4 กลไกการจัดคิวของคาร์บอน 7 7 รักษาความเป็นจริง จุดเก็บข้อมูลเวลาเป็นวิธีที่ดีในการเพิ่มประสิทธิภาพของคาร์บอน IO แต่ไม่ใช้เวลานานสำหรับผู้ใช้ของฉันเพื่อสังเกตเห็นผลข้างเคียงที่ค่อนข้างหนักใจ Revisiting ตัวอย่างของเราอีกครั้งเรามี 600,000 เมตริกที่ปรับปรุงทุกนาทีและเราสมมติว่าเรา พื้นที่เก็บข้อมูลสามารถเก็บข้อมูลได้มากถึง 60,000 ครั้งต่อนาทีซึ่งหมายความว่าเราจะมีข้อมูลนั่งอยู่ในคิวคาร์บอนประมาณ 10 นาทีในเวลาใดก็ตามผู้ใช้จึงหมายความว่ากราฟที่พวกเขาขอจากเว็บเซิร์ฟเวอร์ Graphite จะหายไปมากที่สุด ล่าสุด 10 นาทีของข้อมูลไม่ดีโชคดีที่การแก้ปัญหาคือสวยตรงไปข้างหน้าฉันเพียงแค่เพิ่มฟังซ็อกเก็ตคาร์บอนที่มีอินเตอร์เฟซแบบสอบถามสำหรับการเข้าถึงจุดข้อมูล buffered แล้วปรับเปลี่ยน weba แกรไฟต์ pp ใช้อินเทอร์เฟซนี้ทุกครั้งที่ต้องการเรียกค้นข้อมูล webapp จะรวมจุดข้อมูลที่เรียกค้นจากคาร์บอนด้วยจุดข้อมูลที่ดึงข้อมูลจากดิสก์และ voila กราฟเป็นแบบเรียลไทม์ที่ได้รับในตัวอย่างข้อมูลของเรามีการอัปเดตจุดข้อมูล ถึงนาทีและจึงไม่ตรงเวลาจริง แต่ความจริงที่ว่าแต่ละจุดข้อมูลสามารถเข้าถึงได้ทันทีในกราฟเมื่อได้รับโดยคาร์บอนเป็นเวลาจริง 7 8 เมล็ด, แคชและความล้มเหลวภัยพิบัติเป็นอาจชัดเจนโดย ตอนนี้ลักษณะสำคัญของประสิทธิภาพของระบบที่ประสิทธิภาพการทำงานของแกรไฟต์เองขึ้นอยู่กับเวลาในการรับส่งข้อมูล IO ดังนั้นเราจึงคาดว่าระบบของเรามีค่า IO แฝงอยู่ในระดับต่ำโดยเฉลี่ยประมาณ 1 มิลลิวินาทีต่อการเขียน แต่นี่เป็นสมมติฐานใหญ่ที่ต้องมีการวิเคราะห์ลึกมากขึ้น ฮาร์ดไดรฟ์เพียง aren t ที่รวดเร็วแม้มีหลายสิบดิสก์ในอาร์เรย์ RAID มีแนวโน้มที่จะมีความล่าช้ามากกว่า 1 มิลลิวินาทีสำหรับการเข้าถึงแบบสุ่ม แต่ถ้าคุณได้ลองและทดสอบว่าเร็วแม้แล็ปท็อปเก่าสามารถ เขียนกิโลไบต์ทั้งหมดลงในดิสก์คุณจะพบว่าการเขียนระบบส่งกลับมาในเวลาที่น้อยกว่า 1 มิลลิวินาทีซอฟต์แวร์ Why. Whenever มีลักษณะการทำงานที่ไม่สอดคล้องกันหรือไม่อาจคาดเดาได้โดยปกติการบัฟเฟอร์หรือแคชก็คือการตำหนิในกรณีนี้เราจะจัดการกับทั้งสอง เขียนระบบเรียก doesn t เทคนิคเขียนข้อมูลของคุณไปยังดิสก์ก็แค่ทำให้มันอยู่ในบัฟเฟอร์ที่เคอร์เนลแล้วเขียนไปยังดิสก์ในภายหลังนี่คือเหตุผลที่เขียนโทรมักจะส่งกลับอย่างรวดเร็วแม้บัฟเฟอร์ได้รับการเขียนลงในดิสก์ก็มักจะ ยังคงแคชสำหรับการอ่านที่ตามมาทั้งสองพฤติกรรมเหล่านี้ buffering และแคชต้องใช้หน่วยความจำของนักพัฒนา kernel. Kernel เป็น folks สมาร์ทที่พวกเขาตัดสินใจว่าจะเป็นความคิดที่ดีที่จะใช้สิ่งที่หน่วยความจำผู้ใช้พื้นที่ปัจจุบันฟรีแทนการจัดสรร หน่วยความจำทั้งหมดนี้จะเปิดออกเป็นตัวเพิ่มประสิทธิภาพที่มีประโยชน์อย่างมากและยังอธิบายว่าทำไมไม่ว่าหน่วยความจำที่คุณเพิ่มลงในระบบมักจะจบลงด้วยเกือบศูนย์ fr หน่วยความจำ ee หลังจากทำจำนวนเจียมเนื้อเจียมตัวของ IO หากผู้ใช้พื้นที่ใช้งานของคุณ aren t ใช้หน่วยความจำที่ kernel ของคุณอาจจะเป็นข้อเสียของวิธีนี้คือหน่วยความจำฟรีนี้สามารถนำมาจากเคอร์เนลขณะที่ผู้ใช้พื้นที่ใช้กำหนด เคอร์เนลไม่มีทางเลือกอื่นนอกจากจะทิ้งมันไปซึ่งอาจทำให้บัฟเฟอร์เสียไปได้ดังนั้นสิ่งที่กล่าวมานี้หมายถึงกราไฟท์เราเน้นความเชื่อมั่นของคาร์บอนที่มีต่อ IO แฝงอยู่ในระดับต่ำและเราก็รู้ด้วยเช่นกัน ที่เขียนระบบโทรกลับได้อย่างรวดเร็วเนื่องจากข้อมูลเป็นเพียงการคัดลอกลงในบัฟเฟอร์เกิดอะไรขึ้นเมื่อมีหน่วยความจำไม่เพียงพอสำหรับเคอร์เนลเพื่อดำเนินการต่อ buffering เขียนเขียนเป็น synchronous และจึงชะมัดช้านี้ทำให้ลดลงอย่างมากในอัตรา การดำเนินการเขียนคาร์บอนซึ่งเป็นสาเหตุให้คิวคาร์บอนโตขึ้นซึ่งกินเนื้อที่ได้มากขึ้นการหิวโหยเคอร์เนลยิ่งกว่านั้นในท้ายที่สุดสถานการณ์เช่นนี้ส่งผลให้ คาร์บอนหมดความทรงจำหรือถูกฆ่าโดยผู้ดูแลระบบโกรธเพื่อหลีกเลี่ยงความหายนะแบบนี้ฉันได้เพิ่มคุณลักษณะหลายอย่างลงในคาร์บอนรวมถึงข้อ จำกัด ที่สามารถกำหนดได้ว่าจะสามารถจัดคิวข้อมูลได้กี่จุดและ จำกัด อัตราการทำงานที่กระซิบได้อย่างรวดเร็ว คุณลักษณะเหล่านี้สามารถปกป้องคาร์บอนจากการหมุนวนออกจากการควบคุมและแทนที่จะใช้ผลรุนแรงน้อยลงเช่นการวางจุดข้อมูลบางส่วนหรือปฏิเสธที่จะยอมรับจุดข้อมูลมากขึ้นอย่างไรก็ตามค่าที่เหมาะสมสำหรับการตั้งค่าเหล่านั้นเป็นระบบเฉพาะและต้องการการทดสอบที่เหมาะสมเพื่อปรับแต่ง มีประโยชน์ แต่พวกเขาไม่พื้นฐานแก้ปัญหาสำหรับที่เราจะต้องฮาร์ดแวร์ more.7 9 Clustering. Making เซิร์ฟเวอร์แกรไฟต์หลายปรากฏเป็นระบบเดียวจากมุมมองของผู้ใช้ isn t ยากชะมัดอย่างน้อยสำหรับการดำเนินการ na ve Webapp การโต้ตอบของผู้ใช้ส่วนใหญ่ประกอบด้วยการดำเนินการสองอย่างในการหาเมตริกและเรียกข้อมูลจุดข้อมูลโดยปกติจะอยู่ในรูปแบบของกราฟการค้นหาและดึงข้อมูลของเว็บมา pp จะซ่อนตัวอยู่ในห้องสมุดที่ abstracts การใช้งานของพวกเขาจากส่วนที่เหลือของ codebase และพวกเขายังสัมผัสผ่านตัวจัดการคำขอสำหรับการโทรระยะไกลได้ง่ายค้นหาการดำเนินงานค้นหาระบบแฟ้มในประเทศของกระซิบข้อมูลสำหรับสิ่งที่ตรงกับรูปแบบที่ผู้ใช้กำหนด, เช่นเดียวกับ glob ของระบบแฟ้มเหมือนกับการจับคู่ไฟล์ที่มีนามสกุลเป็นโครงสร้างของต้นไม้ผลลัพท์ที่ส่งกลับโดย find คือชุดของออบเจ็กต์ Node แต่ละอันมาจากสาขาย่อยหรือ Leaf sub-classes ของ Node Directories จะสอดคล้องกับโหนดสาขาและไฟล์กระซิบ เพื่อโหนดใบเลเยอร์นี้จะช่วยให้ง่ายต่อการรองรับการจัดเก็บข้อมูลพื้นฐานที่แตกต่างกันรวมถึงไฟล์ RRD 5 และไฟล์กระซิบ gzip ส่วนติดต่อ Leaf จะกำหนดวิธีการดึงข้อมูลซึ่งการใช้งานขึ้นอยู่กับชนิดของโหนดใบในกรณีของไฟล์กระซิบนั้น เพียงแค่ wrapper บางรอบฟังก์ชั่นเรียกดูไลบรารีของตัวเองกระซิบเมื่อคลัสเตอร์ถูกเพิ่มเข้าไปฟังก์ชั่นค้นหาถูกขยายเพื่อให้สามารถทำ ke remote หาสายผ่านทางเซิร์ฟเวอร์ Graphite อื่นที่ระบุในการกำหนดค่า webapp s ข้อมูลโหนดที่มีอยู่ในผลลัพธ์ของการเรียกเหล่านี้จะถูกห่อเป็นวัตถุ RemoteNode ซึ่งสอดคล้องกับอินเทอร์เฟสโหนดสาขาและ Leaf ตามปกติซึ่งจะทำให้การจัดกลุ่มมีความโปร่งใสกับส่วนที่เหลือทั้งหมด webapp s codebase วิธีการดึงข้อมูลสำหรับโหนดใบแบบระยะไกลจะถูกใช้งานเป็นการเรียกอีกครั้งเพื่อดึงข้อมูลจุดจากเซิร์ฟเวอร์ graphite โหนดทั้งหมดนี้ถูกสร้างขึ้นระหว่าง webapps เช่นเดียวกับที่ลูกค้าจะเรียกใช้ พารามิเตอร์ที่ระบุว่าการดำเนินการควรดำเนินการภายในเครื่องเท่านั้นและจะไม่ถูกแจกจ่ายซ้ำในคลัสเตอร์เมื่อเว็บแอ็พถามเพื่อแสดงกราฟจะดำเนินการค้นหาเพื่อหาเมตริกที่ร้องขอและเรียกเรียกข้อมูลแต่ละรายการเพื่อเรียกข้อมูลจุดเหล่านี้ ข้อมูลอยู่บนเซิร์ฟเวอร์ภายในเซิร์ฟเวอร์ระยะไกลหรือทั้งสองกรณีถ้าเซิร์ฟเวอร์ลงไประยะไกลจะเรียกใช้ระยะเวลาค่อนข้างเร็วและเซิร์ฟเวอร์คือ ma rked เนื่องจากไม่มีการให้บริการในช่วงเวลาสั้น ๆ ระหว่างที่ไม่มีการโทรออกจากมุมมองของผู้ใช้ข้อมูลใดก็ตามที่อยู่ในเซิร์ฟเวอร์ที่สูญหายจะหายไปจากกราฟของพวกเขายกเว้นว่าข้อมูลจะถูกทำซ้ำบนเซิร์ฟเวอร์อื่นในคลัสเตอร์ 7 9 1 การวิเคราะห์โดยย่อของ Clustering Efficiency ส่วนที่แพงที่สุดของคำขอกราฟคือการแสดงกราฟการแสดงผลแต่ละครั้งจะดำเนินการโดยเซิร์ฟเวอร์เครื่องเดียวดังนั้นการเพิ่มเซิร์ฟเวอร์เพิ่มเติมจะช่วยเพิ่มขีดความสามารถในการแสดงกราฟได้อย่างมีประสิทธิภาพอย่างไรก็ตามความต้องการที่มากขึ้น การกระจายการค้นหาการเรียกไปยังเซิร์ฟเวอร์อื่น ๆ ทั้งหมดในคลัสเตอร์หมายความว่าโครงการจัดกลุ่มของเรากำลังใช้งานแบ็กเอนด์มากกว่าการกระจายมันสิ่งที่เราประสบความสำเร็จในจุดนี้เป็นวิธีที่มีประสิทธิภาพในการกระจายแบ็คเอนด์ แต่ละอินสแตนซ์คาร์บอนทำงานได้อย่างอิสระนี่เป็นขั้นตอนแรกที่ดีเนื่องจากส่วนใหญ่ปลายด้านหลังเป็นคอขวดที่อยู่ไกลก่อนส่วนหน้า แต่ส่วนปลายด้านหน้าจะไม่สามารถปรับความสูงได้ lly ด้วยวิธีนี้เพื่อที่จะทำให้ระดับส่วนหน้ามีประสิทธิภาพมากขึ้นจำนวนของการเรียกหาระยะไกลที่ทำโดย webapp จะต้องลดลงอีกครั้งวิธีที่ง่ายที่สุดคือแคชเช่นเดียวกับ memcached ใช้อยู่แล้วเพื่อแคชจุดข้อมูลและกราฟแสดงผล, นอกจากนี้ยังสามารถใช้เพื่อแคชผลลัพธ์ของการค้นหาเนื่องจากตำแหน่งของเมตริกมีโอกาสน้อยที่จะเปลี่ยนแปลงบ่อยขึ้นซึ่งโดยปกติแล้วควรแคชนานขึ้นการปิดการตั้งค่าระยะหมดเวลาของแคชเพื่อหาผลลัพธ์นานเกินไป เมตริกใหม่ที่ถูกเพิ่มลงในลำดับชั้นอาจไม่ปรากฏอย่างรวดเร็วให้กับผู้ใช้ 7 9 2 การแจกจ่ายเมตริกในคลัสเตอร์ webapp แบบแกรไฟต์มีลักษณะเหมือนกันทั่วทั้งคลัสเตอร์เนื่องจากทำงานได้เหมือนกันกับแต่ละเซิร์ฟเวอร์คาร์บอน อย่างไรก็ตามบทบาทของเซิร์ฟเวอร์อาจแตกต่างกันไปในแต่ละเซิร์ฟเวอร์ขึ้นอยู่กับข้อมูลที่คุณเลือกที่จะส่งไปยังแต่ละอินสแตนซ์บ่อยครั้งที่มีลูกค้าจำนวนมากที่ส่งข้อมูลไปยังคาร์บอนดังนั้นจึงน่าจะเป็นที่น่ารำคาญมากสำหรับลูกค้า confi การกำหนดค่าของคลัสเตอร์ด้วยการจัดวางกลุ่มของ Graphite เมตริกของแอพพลิเคชันอาจไปที่เซิร์ฟเวอร์คาร์บอนหนึ่งตัวในขณะที่เมตริกธุรกิจอาจถูกส่งไปยังเซิร์ฟเวอร์คาร์บอนหลายตัวเพื่อลดความซ้ำซ้อนเพื่อลดความซับซ้อนในการจัดการกับสถานการณ์เช่นนี้ Graphite มาพร้อมกับเครื่องมือเพิ่มเติมที่เรียกว่า ค่อนข้างง่ายจะได้รับข้อมูลเมตริกจากลูกค้าเหมือนกับมอนคาร์บอนมาตรฐานซึ่งเป็นชื่อคาร์บอนแคช แต่แทนที่จะจัดเก็บข้อมูลจะใช้ชุดของกฎกับชื่อเมตริกเพื่อกำหนดว่าเซิร์ฟเวอร์แคชคาร์บอนใดที่จะถ่ายทอดข้อมูล แต่ละกฎประกอบด้วยนิพจน์ทั่วไปและรายการเซิร์ฟเวอร์ปลายทางสำหรับแต่ละจุดข้อมูลที่ได้รับกฎจะได้รับการประเมินตามลำดับและกฎข้อแรกที่มีนิพจน์ทั่วไปตรงกับชื่อเมตริกจะใช้วิธีนี้ทำให้ลูกค้าทุกคนต้องทำคือส่งข้อมูล ข้อมูลไปยังคาร์บอนรีเลย์และมันจะจบลงบนเซิร์ฟเวอร์ที่ถูกต้องในความรู้สึกคาร์บอนรีเลย์ให้ฟังก์ชันการจำลองแบบแม้ว่าจะเรียกได้ถูกต้องว่า d uplication เนื่องจากไม่ได้จัดการกับปัญหาการซิงโครไนซ์หากเซิร์ฟเวอร์หยุดทำงานชั่วคราวจะไม่มีจุดข้อมูลสำหรับรอบระยะเวลาที่ระบบหยุดทำงาน แต่ทำงานได้ตามปกติปกติมีสคริปต์การดูแลระบบที่ออกจากกระบวนการควบคุมการซิงโครไนซ์อีกครั้งใน มือของผู้ดูแลระบบ 7 10 Reflections การออกแบบประสบการณ์ของฉันในการทำงานเกี่ยวกับกราไฟท์ได้ยืนยันความเชื่อของฉันว่า scalability มีน้อยมากจะทำอย่างไรกับประสิทธิภาพต่ำ แต่แทนที่จะเป็นผลิตภัณฑ์ของการออกแบบโดยรวมฉันได้ทำงานในคอขวดมาก ไปตลอดทาง แต่ทุกครั้งที่ฉันมองหาการปรับปรุงในการออกแบบมากกว่าความเร็ว - ups ประสิทธิภาพฉันได้รับการถามหลายครั้งว่าทำไมฉันเขียน Graphite ใน Python มากกว่า Java หรือ C และการตอบสนองของฉันอยู่เสมอว่าฉันยังไม่เจอ ความต้องการที่แท้จริงสำหรับการแสดงที่ภาษาอื่นสามารถนำเสนอได้ใน Knu74 Donald Knuth กล่าวว่าการเพิ่มประสิทธิภาพก่อนกำหนดเป็นรากฐานของความชั่วร้ายทั้งหมดตราบเท่าที่เราคิดว่ารหัสของเรามี จะมีการพัฒนาอย่างต่อเนื่องในรูปแบบที่ไม่ใช่ของเล็ก ๆ น้อย ๆ จากนั้นการเพิ่มประสิทธิภาพทั้งหมด 6 เป็นไปในบางช่วงเวลาก่อนวัยอันควรหนึ่งในจุดแข็งที่ยิ่งใหญ่ที่สุดของแกรไฟต์และจุดอ่อนที่ยิ่งใหญ่ที่สุดคือความจริงที่ว่าน้อยมากของมันได้รับการออกแบบจริงในความรู้สึกแบบดั้งเดิมและขนาดใหญ่ Graphite วิวัฒนาการค่อยๆ, กีดขวางโดยกีดขวางเป็นปัญหาที่เกิดขึ้นหลายครั้งอุปสรรคที่สามารถมองเห็นได้และการแก้ปัญหา pre-emptive ต่างๆดูเหมือนเป็นธรรมชาติ แต่ก็สามารถเป็นประโยชน์เพื่อหลีกเลี่ยงการแก้ปัญหาที่คุณไม่ได้จริงยังมีแม้ว่าจะดูเหมือนว่าโอกาสที่คุณเร็ว ๆ นี้จะเป็นเหตุผลก็คือ คุณสามารถเรียนรู้ได้มากขึ้นจากการศึกษาความผิดพลาดที่เกิดขึ้นจริงอย่างแท้จริงจากการคิดทฤษฎีเกี่ยวกับกลยุทธ์ที่เหนือกว่าการแก้ปัญหาจะเกิดขึ้นจากข้อมูลเชิงประจักษ์ที่เรามีอยู่ในมือและความรู้และสัญชาตญาณของเราเองฉันพบว่าสงสัยในภูมิปัญญาของคุณมากพอที่จะบังคับให้คุณมอง ข้อมูลเชิงประจักษ์ของคุณอย่างละเอียดมากขึ้นตัวอย่างเช่นเมื่อฉันแรกเขียนกระซิบผมเชื่อว่าจะต้องมีการเขียนใหม่ใน C สำหรับความเร็วและ Python ของฉันฉัน mplementation จะทำหน้าที่เป็นต้นแบบถ้าฉันไม่ได้อยู่ภายใต้เวลากระทืบฉันเป็นอย่างดีอาจจะข้ามการใช้งูหลามทั้งหมดมันจะเปิดออก แต่ที่ IO เป็นคอขวดมากก่อนหน้านี้กว่า CPU ที่มีประสิทธิภาพน้อยกว่าของ Python แทบจะไม่เรื่องเลย ในทางปฏิบัติในขณะที่ฉันกล่าวว่าแม้ว่าวิธีการวิวัฒนาการยังเป็นจุดอ่อนที่ดีของการเชื่อมต่อกราไฟท์ก็จะเปิดออกไม่ให้ยืมตัวดีกับวิวัฒนาการทีละน้อยอินเตอร์เฟซที่ดีมีความสอดคล้องและใช้วิธีการเพื่อเพิ่มการคาดการณ์โดยมาตรการนี้ Graphite s URL API ปัจจุบันเป็นส่วนย่อยย่อยในความเห็นของฉันตัวเลือกและฟังก์ชันได้รับการติดตั้งเมื่อเวลาผ่านไปบางครั้งสร้างเกาะขนาดเล็กของความสอดคล้อง แต่โดยรวมขาดความรู้สึกระดับโลกของความสอดคล้องวิธีเดียวที่จะแก้ปัญหาดังกล่าวคือผ่าน versioning ของอินเตอร์เฟซ แต่นี้ก็มีข้อบกพร่องเมื่อมีการออกแบบอินเตอร์เฟซใหม่เก่ายังคงยากที่จะกำจัด, เอ้อระเหยรอบเป็นสัมภาระวิวัฒนาการเช่นภาคผนวกมนุษย์ฉัน t อาจดูเหมือนไม่เป็นอันตรายจนวันหนึ่งรหัสของคุณได้รับข้อผิดพลาด IEA ไส้ติ่งเชื่อมโยงกับอินเตอร์เฟซเก่าและคุณบังคับให้ทำงานถ้าฉันจะเปลี่ยนสิ่งหนึ่งเกี่ยวกับกราไฟท์ในช่วงต้นของมันจะได้รับการดูแลมากขึ้นในการออกแบบภายนอก APIs คิดไปข้างหน้าแทนการพัฒนาพวกเขาบิตโดยบิตด้านอื่น ๆ ของกราไฟท์ที่ทำให้เกิดความขุ่นมัวบางอย่างมีความยืดหยุ่น จำกัด ของแบบจำลองการตั้งชื่อตัวแบบลำดับชั้นในขณะที่ค่อนข้างง่ายและสะดวกสำหรับกรณีการใช้งานมากที่สุดก็จะทำให้บางคำสั่งที่ซับซ้อนยากมาก แม้จะเป็นไปไม่ได้ที่จะแสดงออกเมื่อครั้งแรกที่ฉันคิดถึงการสร้างแกรไฟต์ฉันรู้ตั้งแต่เริ่มแรกว่าฉันต้องการ URL API ที่มนุษย์สามารถแก้ไขได้สำหรับการสร้างกราฟ 7 ขณะที่ฉันยังคงพอใจที่แกรไฟต์มีวันนี้อยู่ฉันกลัวว่าความต้องการนี้จะมีขึ้น API ที่มีไวยากรณ์ที่มากเกินไปซึ่งทำให้การแสดงออกที่ซับซ้อนไม่สามารถใช้งานได้ลำดับชั้นทำให้ปัญหาในการกำหนดคีย์หลักสำหรับเมตริกค่อนข้างง่ายเนื่องจากเส้นทางเป็น หลักคือคีย์หลักสำหรับโหนดในโครงสร้างข้อเสียคือข้อมูลทั้งหมดที่กล่าวถึง ได้แก่ ข้อมูลคอลัมน์ต้องถูกฝังโดยตรงในเส้นทางวิธีแก้ปัญหาที่อาจเกิดขึ้นคือการรักษาแบบจำลองลำดับชั้นและเพิ่มฐานข้อมูล metadata แยกต่างหากเพื่อให้สามารถเลือก เมทริกซ์ที่มีไวยากรณ์พิเศษ 7 11 กลายเป็น Open Source มองย้อนกลับไปที่วิวัฒนาการของแกรไฟต์ฉันยังคงประหลาดใจทั้งโดยวิธีไกลมีมาเป็นโครงการและโดยไกลได้เอาฉันเป็นโปรแกรมเมอร์เริ่มต้นเป็นสัตว์เลี้ยง โครงการที่เป็นเพียงไม่กี่ร้อยบรรทัดของรหัสเครื่องยนต์การแสดงผลเริ่มต้นเป็นการทดลองเพียงเพื่อดูว่าฉันสามารถเขียนกระซิบหนึ่งถูกเขียนขึ้นในช่วงสุดสัปดาห์ออกจากความสิ้นคิดในการแก้ปัญหาที่เกิดขึ้นก่อนที่จะมีการเปิดตัววันที่สำคัญการเปิดตัว คาร์บอนได้รับการเขียนใหม่ครั้งกว่าที่ฉันสนใจที่จะจำเมื่อฉันได้รับอนุญาตให้ปล่อย Graphite ภายใต้ใบอนุญาตโอเพนซอร์สในปี 2008 ฉันไม่เคยคาดหวังจริงๆการตอบสนองมากหลังจากไม่กี่เดือนก็กล่าวถึงใน CNET arti cle ที่ได้รับขึ้นโดย Slashdot และโครงการก็เอาออกและได้รับการใช้งานนับตั้งแต่วันนี้มีหลายสิบ บริษัท ขนาดใหญ่และขนาดกลางโดยใช้แกรไฟต์ชุมชนมีการใช้งานค่อนข้างและยังคงเติบโตไกลจากการเป็นผลิตภัณฑ์สำเร็จรูปมี จำนวนมากทำงานทดลองเย็นที่ทำซึ่งทำให้มันสนุกกับการทำงานและเต็มศักยภาพมีพอร์ตอื่นที่วัตถุต่อเนื่องสามารถส่งซึ่งมีประสิทธิภาพมากกว่ารูปแบบข้อความธรรมดานี้เป็นสิ่งจำเป็นเฉพาะสำหรับสูงมาก ระดับของการจราจรไดรฟ์ของรัฐแบบทั่วไปมักหาเวลาค้นหาได้เร็วมากเมื่อเทียบกับฮาร์ดไดรฟ์แบบดั้งเดิมไฟล์ RRD เป็นโหนดสาขาเนื่องจากสามารถมีแหล่งข้อมูลหลายแหล่งข้อมูล RRD เป็นโหนดของใบโดยเฉพาะหมายถึงการเพิ่มประสิทธิภาพรหัสระดับต่ำ ไม่ใช่การเพิ่มประสิทธิภาพแบบ macroscopic เช่นการปรับปรุงการออกแบบซึ่งจะบังคับให้กราฟเป็นโอเพ่นซอร์สทุกคนสามารถดู URL ของกราฟเพื่อทำความเข้าใจหรือแก้ไขได้
Comments
Post a Comment