1 / 25

Architecting real-world Azure applications

SESSION CODE: ARC-COS-MID208. Doug Bower & Bradley Smith MYOB. Architecting real-world Azure applications. Agenda. Who we are - where we have come from Architecture overview Stories of our experience Saving money with Azure. What is MYOB?.

olinda
Télécharger la présentation

Architecting real-world Azure applications

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. SESSION CODE: ARC-COS-MID208 Doug Bower & Bradley Smith MYOB Architecting real-world Azure applications (c) 2011 Microsoft. All rights reserved.

  2. (c) 2011 Microsoft. All rights reserved.

  3. Agenda • Who we are - where we have come from • Architecture overview • Stories of our experience • Saving money with Azure (c) 2011 Microsoft. All rights reserved.

  4. What is MYOB? • Provider of business management solutions that make business life easier • Range of products & services • accounting, payroll, CRM, ERP, websites & much more • Over 1 million businesses in AU & NZ (c) 2011 Microsoft. All rights reserved.

  5. Trevor the plumber (my step dad) • Sole Trader • Limited technical experience • Rarely uses a computer (c) 2011 Microsoft. All rights reserved.

  6. Ray – writes software (my uncle) • Small business • Travels overseas for work • Excited by technology • Wants his Accountant in the business (c) 2011 Microsoft. All rights reserved.

  7. What is MYOB AccountRight? (c) 2011 Microsoft. All rights reserved.

  8. The new platform User Interface Biz Logic Database (c) 2011 Microsoft. All rights reserved.

  9. The existing product – in the wild ui ui ui ui ui ui ui ui ui ui biz biz biz biz biz biz biz biz biz biz db ui ui db db db db db db ui ui db db db ui ui biz biz biz biz biz biz UI UI UI db db db db db db Biz Biz Biz DB DB DB UI UI Biz Logic Biz Logic Database Database (c) 2011 Microsoft. All rights reserved.

  10. Architecture and planning (c) 2011 Microsoft. All rights reserved. Image: photostock / FreeDigitalPhotos.net

  11. To the cloud! User Interface Biz Logic Biz Logic Database Database Sync (c) 2011 Microsoft. All rights reserved.

  12. You can’t manage what you don’t own • Latency • Connection type • Bandwidth • Machine specifications • Weather? (c) 2011 Microsoft. All rights reserved. Image: dan/ FreeDigitalPhotos.net

  13. Retrying your task • UI / Network • Database • True statelessness (c) 2011 Microsoft. All rights reserved.

  14. Chattiness and UI fidelity User Interface Biz Logic Biz Logic Database Database (c) 2011 Microsoft. All rights reserved.

  15. Chattiness and UI fidelity User Interface Biz Logic Biz Logic Database Database (c) 2011 Microsoft. All rights reserved. (c) 2011 Microsoft. All rights reserved.

  16. Compression (c) 2011 Microsoft. All rights reserved. <Account z:Id="1" z:Type="MYOB.Huxley.BusinessLayer.Entities.Account" z:Assembly="Huxley.BusinessLayer, Version=2011.1.0.0, Culture=neutral, PublicKeyToken=947f70fecdd4159f" xmlns="http://schemas.datacontract.org/2004/07/MYOB.Huxley.BusinessLayer.Entities" xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:z="http://schemas.microsoft.com/2003/10/Serialization/">   <_AccountDescription z:Id="2" z:Type="System.String" z:Assembly="0" xmlns="">Blah</_AccountDescription>   <_dirtyPropertyNames z:Id="3" z:Type="System.Collections.Generic.HashSet`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" z:Assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" xmlns="">     <Version z:Id="4" z:Type="System.Int32" z:Assembly="0">1</Version>     <Comparer z:Id="5" z:Type="System.Collections.Generic.GenericEqualityComparer`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" z:Assembly="0" />     <Capacity z:Id="6" z:Type="System.Int32" z:Assembly="0">3</Capacity>     <Elements z:Id="7" z:Type="System.String[]" z:Assembly="0" z:Size="1">       <x:string z:Id="8">AccountDescription</x:string>     </Elements>   </_dirtyPropertyNames>   <_lock z:Id="9" xmlns="" />   <_mappedPropertyNames z:Id="10" z:Type="System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" z:Assembly="0" xmlns="">     <Version z:Id="11" z:Type="System.Int32" z:Assembly="0">1</Version>     <Comparer z:Ref="5" i:nil="true" />     <HashSize z:Id="12" z:Type="System.Int32" z:Assembly="0">3</HashSize>     <KeyValuePairs z:Id="13" z:Type="System.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]][]" z:Assembly="0" z:Size="1">       <KeyValuePairOfstringstringxmlns="http://schemas.datacontract.org/2004/07/System.Collections.Generic">         <key z:Ref="8" i:nil="true" />         <value z:Ref="8" i:nil="true" />       </KeyValuePairOfstringstring>     </KeyValuePairs>   </_mappedPropertyNames>   <_AccountBankDetail z:Id="14" z:Type="System.Data.Linq.EntitySet`1[[MYOB.Huxley.BusinessLayer.Entities.AccountBankDetail, Huxley.BusinessLayer, Version=2011.1.0.0, Culture=neutral, PublicKeyToken=947f70fecdd4159f]]" z:Assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" xmlns="">     <isLoaded z:Id="15" z:Type="System.Boolean" z:Assembly="0">false</isLoaded>     <isModified z:Id="16" z:Type="System.Boolean" z:Assembly="0">false</isModified>     <items z:Id="17" z:Type="System.Object[]" z:Assembly="0" z:Size="0" />   </_AccountBankDetail>   <_AccountName z:Id="18" z:Type="System.String" z:Assembly="0" xmlns="" />   <_AccountNumber z:Id="19" z:Type="System.Int32" z:Assembly="0" xmlns="">0</_AccountNumber>   <_AccountantLinkCode z:Ref="18" i:nil="true" xmlns="" />   <_AcctType z:Id="20" z:Type="System.Int16" z:Assembly="0" xmlns="">0</_AcctType>   <_ChangeCtr i:nil="true" xmlns="" />   <_ChartLevel z:Id="21" z:Type="System.Int16" z:Assembly="0" xmlns="">0</_ChartLevel>   <_ClassificationForStatementOfCashFlow z:Id="22" z:Type="System.Int16" z:Assembly="0" xmlns="">0</_ClassificationForStatementOfCashFlow>   <_ConversionOpeningBalance z:Id="23" z:Type="System.Decimal" z:Assembly="0" xmlns="">0</_ConversionOpeningBalance>   <_ConversionOpeningBalanceForeign i:nil="true" xmlns="" />   <_AccountBalance z:Id="24" z:Type="System.Data.Linq.EntityRef`1[[MYOB.Huxley.BusinessLayer.Entities.AccountBalance, Huxley.BusinessLayer, Version=2011.1.0.0, Culture=neutral, PublicKeyToken=947f70fecdd4159f]]" z:Assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" xmlns="">     <entity i:nil="true" />   </_AccountBalance>   <_IsHeader z:Id="25" z:Type="System.Boolean" z:Assembly="0" xmlns="">false</_IsHeader>   <_IsImmutable z:Id="26" z:Type="System.Boolean" z:Assembly="0" xmlns="">false</_IsImmutable>   <_IsSystem z:Id="27" z:Type="System.Boolean" z:Assembly="0" xmlns="">false</_IsSystem>   <_IsVisible z:Id="28" z:Type="System.Boolean" z:Assembly="0" xmlns="">false</_IsVisible>   <_LastCheckNumber z:Id="29" z:Type="System.Int32" z:Assembly="0" xmlns="">0</_LastCheckNumber>   <_LastReconcileDate i:nil="true" xmlns="" />   <_ParentPtr i:nil="true" xmlns="" />   <_ParentPtrAccount z:Id="30" z:Type="System.Data.Linq.EntityRef`1[[MYOB.Huxley.BusinessLayer.Entities.Account, Huxley.BusinessLayer, Version=2011.1.0.0, Culture=neutral, PublicKeyToken=947f70fecdd4159f]]" z:Assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" xmlns="">     <entity i:nil="true" />   </_ParentPtrAccount>   <_RecordID z:Id="31" z:Type="System.Int32" z:Assembly="0" xmlns="">0</_RecordID>   <_ReportSubtotal z:Id="32" z:Type="System.Boolean" z:Assembly="0" xmlns="">false</_ReportSubtotal>   <_SubAcctType z:Id="33" z:Type="System.Int16" z:Assembly="0" xmlns="">0</_SubAcctType>   <_TaxCode z:Id="34" z:Type="System.Data.Linq.EntityRef`1[[MYOB.Huxley.BusinessLayer.Entities.TaxCode, Huxley.BusinessLayer, Version=2011.1.0.0, Culture=neutral, PublicKeyToken=947f70fecdd4159f]]" z:Assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" xmlns="">     <entity i:nil="true" />   </_TaxCode>   <_TaxCodeRecordId i:nil="true" xmlns="" />   <_trackedAccountNumber z:Id="35" z:Type="MYOB.Huxley.Utilities.General.TrackingReference`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" z:Assembly="Huxley.Utilities, Version=2011.1.0.0, Culture=neutral, PublicKeyToken=947f70fecdd4159f" xmlns="">     <_oldValue z:Id="36" z:Type="System.Int32" z:Assembly="0">0</_oldValue>     <_value z:Id="37" z:Type="System.Int32" z:Assembly="0">0</_value>   </_trackedAccountNumber>   <_trackedCurrencyId z:Id="38" z:Type="MYOB.Huxley.Utilities.General.TrackingReference`1[[System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" z:Assembly="Huxley.Utilities, Version=2011.1.0.0, Culture=neutral, PublicKeyToken=947f70fecdd4159f" xmlns="">     <_oldValue i:nil="true" />     <_value i:nil="true" />   </_trackedCurrencyId>   <_trackedIsHeader z:Id="39" z:Type="MYOB.Huxley.Utilities.General.TrackingReference`1[[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" z:Assembly="Huxley.Utilities, Version=2011.1.0.0, Culture=neutral, PublicKeyToken=947f70fecdd4159f" xmlns="">     <_oldValue z:Id="40" z:Type="System.Boolean" z:Assembly="0">false</_oldValue>     <_value z:Id="41" z:Type="System.Boolean" z:Assembly="0">false</_value>   </_trackedIsHeader>   <_trackedOpeningBalance z:Id="42" z:Type="MYOB.Huxley.Utilities.General.TrackingReference`1[[System.Decimal, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" z:Assembly="Huxley.Utilities, Version=2011.1.0.0, Culture=neutral, PublicKeyToken=947f70fecdd4159f" xmlns="">     <_oldValue z:Id="43" z:Type="System.Decimal" z:Assembly="0">0</_oldValue>     <_value z:Id="44" z:Type="System.Decimal" z:Assembly="0">0</_value>   </_trackedOpeningBalance>   <_trackedSubType z:Id="45" z:Type="MYOB.Huxley.Utilities.General.TrackingReference`1[[MYOB.Huxley.API.Entities.SubAccountType, Huxley.IAPI, Version=2011.1.0.0, Culture=neutral, PublicKeyToken=947f70fecdd4159f]]" z:Assembly="Huxley.Utilities, Version=2011.1.0.0, Culture=neutral, PublicKeyToken=947f70fecdd4159f" xmlns="">     <_oldValue z:Id="46" z:Type="MYOB.Huxley.API.Entities.SubAccountType" z:Assembly="Huxley.IAPI, Version=2011.1.0.0, Culture=neutral, PublicKeyToken=947f70fecdd4159f">Unknown</_oldValue>     <_value z:Id="47" z:Type="MYOB.Huxley.API.Entities.SubAccountType" z:Assembly="Huxley.IAPI, Version=2011.1.0.0, Culture=neutral, PublicKeyToken=947f70fecdd4159f">Unknown</_value>   </_trackedSubType>   <ObjectState z:Id="48" z:Type="MYOB.Huxley.API.Enums.ObjectState" z:Assembly="Huxley.IAPI, Version=2011.1.0.0, Culture=neutral, PublicKeyToken=947f70fecdd4159f" xmlns="">Unchanged</ObjectState>   <BankingDetails i:nil="true" xmlns="" /> </Account>

  17. Caching Company A Company B Company C Company D Company E Company F Company G Company H Company I Company J (c) 2011 Microsoft. All rights reserved.

  18. Scalability Controller Agent Agent Biz Logic Agent Database Agent (c) 2011 Microsoft. All rights reserved.

  19. (c) 2011 Microsoft. All rights reserved.

  20. Scalability • Number of threads: 200 • Scenarios run: Tradies • Duration of test: 1 hour • Ramp up time: 20 min • CPU Usage: • Average 40-50% • For this many threads, the ideal CPU usage would be considerably lower. • Memory Usage / Garbage Collection: • Gen 2 (long lived objects) is relatively high • As an indicator, the lower this graph gets, the less impact garbage collection has on the health of the system. (c) 2011 Microsoft. All rights reserved.

  21. Cost management with Azure • VM Size affects performance • Watch your databases • Compute Emulator helps (c) 2011 Microsoft. All rights reserved.

  22. Summary • Everyone will have a different journey, Embrace it • Connectivity • Scalability • User Experience • Caching (c) 2011 Microsoft. All rights reserved.

  23. Next steps • “Accelerated Developer Learning” • Azure free trial • Blogs – bing is your friend • .NET user groups in your locale • Doug.bower@myob.com • Bradley.smith@myob.com (c) 2011 Microsoft. All rights reserved.

  24. Enrol in Microsoft Virtual Academy Today Why Enroll, other than it being free? The MVA helps improve your IT skill set and advance your career with a free, easy to access training portal that allows you to learn at your own pace, focusing on Microsoft technologies. • What Do I get for enrolment? • Free training to make you become the Cloud-Hero in my Organization • Help mastering your Training Path and get the recognition • Connect with other IT Pros and discuss The Cloud Where do I Enrol? www.microsoftvirtualacademy.com Then tell us what you think. TellTheDean@microsoft.com

  25. © 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION. (c) 2011 Microsoft. All rights reserved.

More Related