Computer >> คอมพิวเตอร์ >  >> ระบบเครือข่าย >> ระบบเครือข่าย

การทำให้เป็นอันดับคืออะไร?

ในระหว่างการประชุมอัปเดตโครงการเมื่อเร็วๆ นี้ ทีมของฉันได้พูดคุยเกี่ยวกับวิธีที่เราจะใช้การทำให้เป็นอนุกรมในการส่งข้อมูลไปมาจากแอปพลิเคชันนี้

วิศวกรที่กำลังมองหาโครงการซอฟต์แวร์เพิ่มเติมบอกฉันว่าพวกเขาไม่คุ้นเคยกับคำศัพท์นี้

เป็นเรื่องง่ายที่จะพลาดกระบวนการที่สำคัญเช่นนี้ ซึ่งจะไม่เกิดขึ้นจนกว่าคุณจะดำดิ่งสู่โครงการที่กว้างขวางยิ่งขึ้น นี่เป็นกรณีของบุคคลนี้เช่นเดียวกับฉัน ณ จุดหนึ่ง

ฉันก็เลยอยากเขียนเกี่ยวกับมัน ฉันช่วยให้เพื่อนร่วมงานของฉันเรียนรู้เกี่ยวกับการทำให้เป็นอันดับในวันนั้น และคุณจะได้เรียนรู้เกี่ยวกับเรื่องนี้ในวันนี้

การทำให้เป็นอันดับคืออะไร

การทำให้เป็นอนุกรมเป็นกระบวนการที่บริการหนึ่งใช้โครงสร้างข้อมูล เช่น พจนานุกรมใน Python ห่อหุ้ม และส่งไปยังบริการอื่นเพื่ออ่าน นั่นคือคำจำกัดความง่ายๆ

ลองนึกภาพว่าฉันต้องส่งข้อความถึงใครซักคน ดังนั้นฉันจึงเขียนข้อความลงบนตัวต่อที่ประกอบแล้ว ฉันแยกชิ้นส่วน เพิ่มคำแนะนำเกี่ยวกับวิธีการประกอบตัวต่อใหม่ และส่งไปพร้อมกัน

ผู้รับข้อความจะได้ชิ้นส่วนของปริศนา รวบรวมทั้งหมด และตอนนี้ก็มีข้อความของฉันแล้ว

การทำให้เป็นอันดับคืออะไร?
ลำดับเหตุการณ์พื้นฐานของลำดับเหตุการณ์

คำจำกัดความทางเทคนิคนั้นสนุกกว่าเล็กน้อย เพื่อความฉลาด การทำให้เป็นอนุกรมเป็นกระบวนการของการแปลงออบเจ็กต์ข้อมูลเป็นสตรีมไบต์ และบันทึกสถานะของอ็อบเจ็กต์ที่จะจัดเก็บไว้ในดิสก์หรือส่งผ่านเครือข่าย วิธีนี้ช่วยลดขนาดพื้นที่เก็บข้อมูลที่จำเป็นและทำให้โอนข้อมูลผ่านเครือข่ายได้ง่ายขึ้น

การทำให้เป็นอันดับคืออะไร?
กระบวนการทำให้เป็นอนุกรม

Marshaling และ Serialization - อะไรคือความแตกต่าง?

กระบวนการของการจัดการอาจมาถึงใจ Marshaling เป็นกระบวนการเปลี่ยนการแสดงหน่วยความจำของวัตถุให้อยู่ในรูปแบบที่เหมาะสมสำหรับการส่งสัญญาณ

แม้ว่าการจัดตำแหน่งและการทำให้เป็นอันดับจะ หลวม ตรงกันมีความแตกต่างที่สำคัญ ตัวอย่างเช่น เมื่อสร้างโปรแกรม Golang เพื่ออ่านข้อมูล JSON ลงในโครงสร้างข้อมูล Golang คุณอาจใช้ marshaling เพื่อแปลค่าคีย์ JSON เป็นค่าคีย์ Golang

ความแตกต่างคืออาจใช้ marshaling เพื่อแปลข้อมูล ในทางกลับกัน การทำให้เป็นอนุกรมจะส่งหรือจัดเก็บข้อมูลในสตรีมแบบไบต์และประกอบกลับเข้าที่ในรูปแบบเดิม ทั้งสองทำเป็นซีเรียลไลซ์เซชั่น แต่มีเจตนาต่างกันในทั้งสองกระบวนการ

คุณสามารถดูโครงสร้างนี้ที่ฉันสร้างขึ้นเพื่อโต้ตอบกับข้อมูล Twitter ด้านล่างเป็นตัวอย่างของการจัดระเบียบในการดำเนินการ ใน Golang คุณสามารถให้คำแนะนำที่เรียกว่าแท็ก ซึ่งสามารถแปลงวัตถุนี้เป็นข้อมูล JSON ได้อย่างง่ายดายโดยใช้บริการ marshaling ในตัวของ Golang

การทำให้เป็นอันดับคืออะไร?
โครงสร้าง Golang โดยใช้แท็ก JSON

Endianness คืออะไร

ฉันยังอยากจะสัมผัสเรื่องของความเอนเดียนเนสเบาๆ Endianness เป็นคำที่ใช้อธิบายลำดับของไบต์ในหน่วยความจำ

คุณสามารถคิดว่าหน่วยความจำเป็นบล็อกที่เก็บข้อมูลไว้ เพื่อให้การซีเรียลไลซ์เซชั่นทำงาน ไบต์สตรีมจำเป็นต้องถ่ายโอนประเภทข้อมูลโดยไม่คำนึงถึง endianness ที่เปลี่ยนแปลงจากระบบหนึ่งไปอีกระบบหนึ่ง

คุณสามารถดูความแตกต่างเล็กและใหญ่ด้านล่าง จำเป็นอย่างยิ่งที่ endianness จะต้องจับคู่จากระบบหนึ่งไปยังอีกระบบหนึ่งหรือถูกแปลงอย่างใด เนื่องจากไม่ใช่ทุกระบบจะเรียงลำดับบิตในลักษณะเดียวกัน

การทำให้เป็นอันดับคืออะไร?
Little และ big-endian ได้รับความอนุเคราะห์จาก https://pvs-studio.com/en/blog /lessons/0019/

กรณีการใช้งานสำหรับ Serialization

กรณีการใช้งานของเราใช้ประโยชน์จากคุณสมบัติเหล่านี้อย่างเต็มที่ เราวางแผนที่จะรับข้อมูลบางส่วนจากฮาร์ดแวร์ที่เรากำลังสแกน บรรจุข้อมูลนั้นลงในไบต์สตรีม และส่งไปพร้อมกับเครือข่ายไปยังบริการอื่นที่จะสร้างข้อมูลขึ้นใหม่

กระบวนการย้อนกลับกระบวนการทำให้เป็นอันดับและสร้างข้อมูลใหม่กลับเป็นรูปแบบเดิมเรียกว่า ดีซีเรียลไลเซชัน .

มีกรณีการใช้งานอื่นสำหรับสิ่งนี้ ตัวอย่างเช่น REST API หรือโปรโตคอลการส่งข้อความ เช่น AMQP สามารถใช้การทำให้เป็นอนุกรมเพื่อบีบอัดและส่งข้อมูล

AMQP เป็นโปรโตคอลการส่งข้อความที่คุณส่งข้อความไปยังนายหน้า AMQP และบริการรับกำลัง "ฟัง" กับนายหน้ารายนี้เพื่อรับข้อความ วิศวกรแบ็กเอนด์อาจทราบเรื่องนี้เป็นอย่างดี เนื่องจากมักใช้สำหรับส่งข้อมูลไปมาภายในระบบแบบกระจาย

ภาษาโปรแกรมหลายภาษารวมถึงความสามารถในการสร้างซีเรียลไลซ์เซชั่นบางอย่างได้อย่างง่ายดาย จึงเป็นหัวข้อที่ไม่เกี่ยวกับภาษา

ตัวอย่างการทำให้เป็นอนุกรม

มายกตัวอย่างอย่างรวดเร็ว รหัสนี้ใช้ไลบรารี kombu เพื่อส่งข้อความผ่าน AMQP เราใช้สิ่งนี้เพื่อส่งข้อความจากแพ็คเกจซอฟต์แวร์หนึ่งไปยังอีกแพ็คเกจหนึ่งผ่านเครือข่าย รหัสนี้ใช้สำหรับบริการส่งข้อความถึงนายหน้า AMQP:

def send_message(self, payload, sender_serializer):
...
    try:
        producer.publish(
            {'payload': message},
            ...
            serializer = 'json',
            ...
        )
        return

จด publish กระบวนการ. เรากำลังส่งต่อวิธีการซีเรียลไลซ์เซชันเป็นอาร์กิวเมนต์ เพื่อให้ไลบรารีรู้วิธีจัดลำดับข้อมูลที่เรากำลังส่งผ่าน

ข้อความข้อมูลจะถูกแปลงเป็นสตรีมไบต์ ซึ่งถ้าคุณดูมัน จะดูเหมือนเป็นตัวอักษรและตัวเลขยาวๆ แล้วเราจะส่งข้อความนั้นไป

บริการที่เกี่ยวข้องจะใช้วิธีการทำให้เป็นอนุกรมเดียวกันเพื่อสร้างข้อมูลขึ้นใหม่ในสถานะเดิม นี่เป็นคุณลักษณะที่สำคัญในขณะที่เรากำลังสร้างชุดเครื่องมือที่จำเป็นต้องสามารถส่งข้อความถึงกันเพื่อให้ทำงานได้

รูปแบบข้อมูลการทำให้เป็นอนุกรม

ฉันใช้ JSON สำหรับการทำให้เป็นอนุกรมทุกครั้งที่มีงานเรียก อย่างไรก็ตาม คุณสามารถใช้อย่างอื่นได้

JSON มีค่าใช้จ่ายมากมาย แต่ความสามารถในการอ่านของมนุษย์ทำให้เหมาะสำหรับฉัน คุณยังสามารถใช้ Protobufs, YAML หรือ XML ได้อีกด้วย นี่เป็นเพียงรูปแบบออบเจ็กต์ข้อมูลบางส่วนที่คุณสามารถใช้ได้

บทสรุป

ฉันดีใจที่ได้สิ่งนี้ออกจากระบบของฉัน ฉันต้องหยุดคิดเกี่ยวกับเรื่องนี้ และหวังว่าจะมีคนเรียนรู้บางอย่างจากมัน

ซีเรียลไลซ์เซชั่นกลายเป็นสิ่งจำเป็นเมื่อคุณรวบรวมไปป์ไลน์การสื่อสารของคุณ เป็นเรื่องดีที่จะรู้เกี่ยวกับหัวข้อนี้เพื่อให้รู้สึกมั่นใจในการใช้เครื่องมือใดๆ ก็ตามที่คุณใช้ด้วยความรู้พื้นฐานที่เหมาะสม

-จอร์จ