17.5. Other Considerations
Several other architectural and development points deserve to be mentioned.
17.5.1. A Word About Optimizing Internet Scale Systems
In most network-based systems there is a tension between the client and the server. A good strategy for the client may be the wrong thing for the server and vice versa. For example, when possible the server would like to minimize its processing costs by pushing as much as possible back to the client, and of course the client feels the same way but in the opposite direction. For example, a server might want to keep a connection open while doing spam processing since that lowers the cost of rejecting a message (which these days is the common case), but the client wants to move on as quickly as possible. Looking at the entire system, that is, the Internet as a whole, the optimum solution may be to balance these two needs.
There have been cases of MTAs that have used strategies that explicitly favor either the client or the server. They can do this only because they have a relatively small installed base. When your system is used on a significant portion of the Internet you have to design it in order to balance the load between both sides in an attempt to optimize the Internet as a whole. This is complicated by the fact that there will always be MTAs completely skewed in one direction or the other—for example, mass mailing systems only care about optimizing the outgoing side.
When designing a system that incorporates both sides of the connection, it is important to avoid playing favorites. Note that this is in stark contrast to the usual asymmetry of clients and services—for example, web servers and web clients are generally not developed by the same groups.
17.5.2. Milter
One of the most important additions to sendmail was the milter (mail filter) interface. Milter allows for the use of offboard plugins (i.e., they run in a separate process) for mail processing. These were originally designed for anti-spam processing. The milter protocol runs synchronously with the server SMTP protocol. As each new SMTP command is received from the client, sendmail calls the milters with the information from that command. The milter has the opportunity to accept the command or send a rejection, which rejects the phase of the protocol appropriate for the SMTP command. Milters are modeled as callbacks, so as an SMTP command comes in, the appropriate milter subroutine is called. Milters are threaded, with a per-connection context pointer handed in to each routine to allow passing state.
In theory milters could work as loadable modules in the sendmail address space. We declined to do this for three reasons. First, the security issues were too significant: even if sendmail were running as a unique non-root user id, that user would have access to all of the state of other messages. Similarly, it was inevitable that some milter authors would try to access internal sendmail state.
Second, we wanted to create a firewall between sendmail and the milters: if a milter crashed, we wanted it to be clear who was at fault, and for mail to (potentially) continue to flow. Third, it was much easier for a milter author to debug a standalone process than sendmail as a whole.
It quickly became clear that the milter was useful for more than anti-spam processing. In fact, the milter.org5 web site lists milters for anti-spam, anti-virus, archiving, content monitoring, logging, traffic shaping, and many other categories, produced by commercial companies and open source projects. The postfix mailer6 has added support for milters using the same interface. Milters have proven to be one of sendmail's great successes.
17.5.3. Release Schedules
There is a popular debate between "release early and often" and "release stable systems" schools of thought. Sendmail has used both of these at various times. During times of considerable change I was sometimes doing more than one release a day. My general philosophy was to make a release after each change. This is similar to providing public access to the source management system tree. I personally prefer doing releases over providing public source trees, at least in part because I use source management in what is now considered an unapproved way: for large changes, I will check in non-functioning snapshots while I am writing the code. If the tree is shared I will use branches for these snapshots, but in any case they are available for the world to see and can create considerable confusion. Also, creating a release means putting a number on it, which makes it easier to track the changes when going through a bug report. Of course, this requires that releases be easy to generate, which is not always true.
As sendmail became used in ever more critical production environments this started to become problematic. It wasn't always easy for others to tell the difference between changes that I wanted out there for people to test versus changes that were really intended to be used in the wild. Labeling releases as "alpha" or "beta" alleviates but does not fix the problem. The result was that as sendmail matured it moved toward less frequent but larger releases. This became especially acute when sendmail got folded into a commercial company which had customers who wanted both the latest and greatest but also only stable versions, and wouldn't accept that the two are incompatible.
This tension between open source developer needs and commercial product needs will never go away. There are many advantages to releasing early and often, notably the potentially huge audience of brave (and sometimes foolish) testers who stress the system in ways that you could almost never expect to reproduce in a standard development system. But as a project becomes successful it tends to turn into a product (even if that product is open source and free), and products have different needs than projects.
12 . การพิจารณาอื่น ๆ
หลาย ๆสถาปัตยกรรมและพัฒนาจุดที่สมควรจะกล่าวถึง .
17.5.1 . เรื่องการปรับขนาดระบบที่ใช้ส่วนใหญ่ในระบบอินเตอร์เน็ต
มีความตึงเครียดระหว่างไคลเอนต์และเซิร์ฟเวอร์ กลยุทธ์ที่ดีสำหรับลูกค้าอาจเป็นสิ่งผิดสำหรับเซิร์ฟเวอร์ และในทางกลับกัน ตัวอย่างเช่นเมื่อเซิร์ฟเวอร์ต้องการลดต้นทุนของการประมวลผลโดยผลักดันมากที่สุดกลับลูกค้าที่เป็นไปได้และแน่นอนลูกค้าก็คงรู้สึกแบบเดียวกัน แต่ในทิศทางตรงกันข้าม ตัวอย่างเช่น เซิร์ฟเวอร์อาจต้องเปิดการเชื่อมต่อให้ในขณะที่กำลังประมวลผลสแปมตั้งแต่ที่ช่วยลดต้นทุนของการปฏิเสธข้อความ ( ซึ่งวันเหล่านี้เป็นกรณีทั่วไป )แต่ลูกค้าต้องการไปให้เร็วที่สุดเท่าที่เป็นไปได้ ดูระบบทั้งหมด นั่นคือ อินเทอร์เน็ตทั้งหมด โซลูชั่นที่เหมาะสมอาจจะเพื่อความสมดุลของทั้งสองความต้องการ
มีกรณีที่มี mtas ที่ใช้กลยุทธ์ที่ชัดเจนช่วยให้ไคลเอนต์หรือเซิร์ฟเวอร์ พวกเขาสามารถทำเช่นนี้เพียงเพราะพวกเขามีขนาดค่อนข้างเล็ก ฐานติดตั้งเมื่อระบบของคุณมีการใช้ในอย่างมีนัยสำคัญของอินเทอร์เน็ตคุณจะต้องออกแบบเพื่อให้สมดุลภาระระหว่างทั้งสองฝ่ายในความพยายามที่จะเพิ่มประสิทธิภาพอินเทอร์เน็ตทั้งหมด . มีความซับซ้อนโดยความจริงที่ว่า จะมี mtas สมบูรณ์เอียงในทิศทางเดียวหรืออื่น ๆ ตัวอย่างเช่น ระบบการส่งจดหมายมวลเท่านั้นที่ดูแลเกี่ยวกับการเพิ่ม
ด้านขาออกเมื่อการออกแบบระบบประกอบด้วยทั้งสองด้านของการเชื่อมต่อ มันเป็นสิ่งสำคัญที่จะหลีกเลี่ยงการเล่นในรายการโปรด โปรดทราบว่านี่คือในสิ้นเชิงกับความไม่สมดุลปกติของลูกค้าและบริการ ตัวอย่างเช่น เซิร์ฟเวอร์เว็บและลูกค้าเว็บมักจะไม่ได้พัฒนาโดยกลุ่มเดียวกัน
17.5.2 . ขี้อาย
หนึ่งของการเพิ่มที่สำคัญที่สุดกับ Sendmail เป็นขี้อาย ( กรองเมล์ ) อินเตอร์เฟซขี้อาย ให้ใช้ offboard ปลั๊กอิน ( คือพวกเขาทำงานในกระบวนการที่แยกต่างหาก ) สำหรับการประมวลผลอีเมล์ เหล่านี้ถูกออกแบบมาสำหรับการประมวลผลต่อต้านสแปม การขี้อายโปรโตคอลวิ่ง synchronously กับเซิร์ฟเวอร์ SMTP โปรโตคอล เป็นคำสั่ง SMTP ใหม่แต่ละที่ได้รับจากลูกค้า sendmail โทร milters กับข้อมูลจากคำสั่งที่ขี้อาย มีโอกาสที่จะยอมรับคำสั่ง หรือส่งการปฏิเสธซึ่งปฏิเสธเฟสของโปรโตคอลที่เหมาะสมสำหรับ SMTP คำสั่ง milters เป็นแบบคัดตัวเพื่อ SMTP คำสั่งมา , subroutine ขี้อายที่เหมาะสมที่เรียกว่า milters มีเกลียวที่มีต่อการเชื่อมต่อบริบท ชี้ยื่นให้แต่ละขั้นตอนให้
ผ่านรัฐในทฤษฎี milters สามารถทำงานเป็น loadable โมดูลใน sendmail ที่อยู่พื้นที่ เราปฏิเสธที่จะทำสำหรับสามเหตุผล ครั้งแรก เรื่องความปลอดภัยก็สำคัญถ้า sendmail ทํางานที่เป็นเอกลักษณ์ ไม่ root ผู้ใช้ ID ที่ผู้ใช้จะได้สามารถเข้าถึงทั้งหมดของรัฐของข้อความอื่นๆ ในทำนองเดียวกัน มันหลีกเลี่ยงไม่ได้ที่บางผู้ขี้อายพยายามเข้า
สภาพ sendmail ภายในประการที่สอง เราต้องการสร้างไฟร์วอลล์ระหว่าง Sendmail และ milters : ถ้าขี้อายตก เราอยากให้มันชัดเจน ใครถูกผิด และเมล์ไป ( อาจ ) ยังคงไหล ประการที่สาม มันง่ายมากสำหรับขี้อายผู้ที่จะแก้ปัญหาแบบสแตนด์อโลนขั้นตอนกว่า sendmail เป็นทั้ง .
มันได้อย่างรวดเร็วกลายเป็นที่ชัดเจนว่าขี้อายก็มีประโยชน์มากกว่าการประมวลผลต่อต้านสแปม ในความเป็นจริง , ขี้อาย .org5 เว็บไซต์รายการ milters ป้องกันสแปม , ไวรัส , เก็บข้อมูล , เนื้อหาการตรวจสอบการเข้าสู่ระบบ , การจราจรการสร้าง , และประเภทอื่น ๆ หลาย ผลิตโดย บริษัท เชิงพาณิชย์ และโครงการเปิดแหล่งที่มา ด้วย mailer6 มีการเพิ่มการสนับสนุนสำหรับ milters ใช้อินเตอร์เฟซเดียวกัน milters ได้พิสูจน์แล้วว่าเป็นหนึ่งในความสำเร็จของโปรแกรม Sendmail มาก
17.5.3 . ปล่อยตาราง
มีความนิยมการอภิปรายระหว่าง " รุ่นแรก และมักจะ " และ " ระบบ " รุ่นเสถียรโรงเรียนความคิด Sendmail ได้ใช้ทั้งสองของเหล่านี้ในช่วงเวลาต่าง ๆ ในช่วงเวลาของการเปลี่ยนแปลงมากบางครั้งผมก็ทำมากกว่าหนึ่งปล่อยวัน ปรัชญาทั่วไปของฉันคือเพื่อให้ปล่อยหลังจากแต่ละการเปลี่ยนแปลง นี้จะคล้ายกับการให้ประชาชนเข้าถึงระบบการจัดการแหล่งต้นไม้ผมเองชอบทำออกมาให้ต้นไม้แหล่งสาธารณะ , อย่างน้อยในส่วนหนึ่งเพราะผมใช้ในการจัดการแหล่งที่ขณะนี้ถือว่าเป็นวิธีที่ไม่อนุมัติ : การเปลี่ยนแปลงขนาดใหญ่ ผมจะตรวจสอบไม่ทำงานอัตโนมัติในขณะที่ผมเขียนโค้ด ถ้าต้นไม้ร่วมกัน ผมจะใช้สาขาภาพรวมเหล่านี้แต่ในกรณีใด ๆ พวกเขามีอยู่เพื่อให้โลกได้เห็น และสามารถสร้างความสับสนมาก นอกจากนี้ การปล่อยหมายความว่า ใส่หมายเลขกำกับไว้ ซึ่งง่ายในการติดตามการเปลี่ยนแปลง เมื่อผ่านการรายงานข้อผิดพลาด ของหลักสูตรนี้ต้องใช้รุ่นที่ออกได้ง่ายเพื่อสร้าง ซึ่งก็ไม่ได้เป็นจริงเสมอไป
เป็นโปรแกรม Sendmail เป็นใช้ในสภาพแวดล้อมการผลิตที่เคยสำคัญนี้ เริ่มจะกลายเป็นปัญหา มันไม่ได้ง่ายเสมอสำหรับคนอื่น ๆที่จะบอกความแตกต่างระหว่างการเปลี่ยนแปลงที่ผมต้องการออกมีสำหรับคนที่จะทดสอบเทียบกับการเปลี่ยนแปลงที่กำลังตั้งใจที่จะใช้ในป่า การติดฉลากออกเป็น " เรา " หรือ " เบต้า " ช่วย แต่ไม่ได้แก้ไขปัญหาพบว่าเป็น sendmail สุกมันย้ายไปบ่อยน้อยกว่า แต่รุ่นที่ใหญ่กว่า นี้เป็นโดยเฉพาะอย่างยิ่งเฉียบพลันเมื่อ sendmail ได้พับเป็นเชิงพาณิชย์ บริษัท ซึ่งมีทั้งลูกค้าที่ต้องการล่าสุดและยิ่งใหญ่ แต่ยังมั่นคงรุ่น และไม่ยอมรับ เพราะสองคนเข้ากันไม่ได้ .
นี้ความตึงเครียดระหว่างเปิดแหล่งพัฒนาความต้องการและความต้องการผลิตภัณฑ์เชิงพาณิชย์จะไม่มีวันจางหายไป มีประโยชน์มากกับการปล่อยต้นและมักจะเล่าเรื่องของผู้ชมที่กล้าหาญมากที่อาจเกิดขึ้น ( และบางครั้งก็โง่ ) ทดสอบที่เน้นระบบในวิธีที่คุณอาจจะไม่เคยคิดว่าจะเกิด ในการพัฒนาระบบมาตรฐานแต่เป็นโครงการที่ประสบความสำเร็จมีแนวโน้มที่จะกลายเป็นผลิตภัณฑ์ ( แม้ว่าผลิตภัณฑ์ที่เป็นโอเพนซอร์สและฟรี ) และผลิตภัณฑ์ที่มีความต้องการที่แตกต่างกันกว่าที่โครงการ
การแปล กรุณารอสักครู่..